Могу ли я получить пользовательский элемент управления из TreeViewItem? - PullRequest
0 голосов
/ 12 июля 2011

У меня есть TreeView, привязанный к данным (модель MVVM), где я использую пользовательский элемент управления для отображения данных.

        <HierarchicalDataTemplate
          DataType="{x:Type vm:SiteViewModel}" 
          ItemsSource="{Binding Children}">
          <StackPanel Orientation="Horizontal">
             <uc:MyUserControl x:Name="control1" Text="{Binding SiteName}" />
          </StackPanel>
        </HierarchicalDataTemplate>

Когда элемент выбран, мне нужен доступ к самому пользовательскому элементу управления.

Я нашел пример выполнения чего-то похожего на то, что я хочу, но он использовал TreeViewItem.Header.В моем коде из-за привязки TreeViewItem.Header является объектом SiteViewModel.

Существует ли простой способ получения фактического пользовательского элемента управления (типа MyUserControl) из самого TreeViewItem?

Спасибо.

1 Ответ

0 голосов
/ 12 июля 2011

Как я понимаю, вы должны указать Command, что приведет к извлечению или изменению какого-либо параметра.в вашем xaml оно будет Binding для свойства, которое вы хотите изменить, может быть с конвертером или без него.Такой способ похож на MVVM.Если вы хотите изменить видимость между двумя элементами управления, как, например, в TextBox и TextBlock, вы должны создать переменную Visibility в вашей View-Model, которая будет представлять ее видимость, и привязать ее значение к TextBox или TextBlok.Ваш xaml будет содержать следующие строки:

<Window.Resources>
    <local:ReverseVisibilityConverter  />
</Window.Resources>
 ....
<TextBox Name="MyTB" Visibility="{Binding tbVisibility}" />
<TextBlock Visibility="{Binding ElementName=MyTB, Path=Visibility, Converter={StaticResources ReverseVisibilityConverter }}" />




public sealed class ReverseVisibilityConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        try
        {
            var flag = (Visibility)value;
            if (flag == Visibility.Visible)
                return Visibility.Collapsed;
            else
                return Visibility.Visible;
        }
        catch
        {
            return Visibility.Visible;
        }
    }
    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        try
        {
            if (((Visibility)value) == Visibility.Visible)
                return Visibility.Collapsed;
            else
                return Visibility.Visible;
        }
        catch
        {
            return Visibility.Visible;
        }
    }
}

, где local - это пространство имен, в котором определены Converter и.Вы обозначаете, что tbVisibility - это переменная, которая существует в Ancestor DataContext.Дайте мне больше информации, чтобы помочь вам, если это не ясно.

...