我有一个绑定到数据的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类型)的简单方法?
感谢。
答案 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
中存在的变量。如果不清楚,请给我更多信息来帮助你。