我可以从TreeViewItem检索用户控件吗?

时间:2011-07-12 08:40:37

标签: wpf data-binding user-controls treeview

我有一个绑定到数据的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对象。

是否有一种从TreeViewItem本身检索实际用户控件(MyUserControl类型)的简单方法?

感谢。

1 个答案:

答案 0 :(得分:0)

据我了解,您应指定Command,它将检索或更改某些参数。在您的xaml中,它将在您想要更改的属性上Binding,可能是转换器或没有它。这样的方式就像MVVM一样。如果要更改两个控件之间的可见性,就像TextBox和TextBlock一样,您应该在View-Model中创建一个Visibility变量来表示其可见性,并将其值绑定到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中存在的变量。如果不清楚,请给我更多信息来帮助你。