在分层树视图中获取 selectedItem 的类型
Get type of selectedItem in hierarchical treeview
我有一个分层树视图,其中包含绑定到不同级别的多种类型的项目。我需要知道选择了什么类型的项目。项目的类型将决定菜单在应用程序其他地方的可见性。
我知道我不能给分层项目命名,否则这将是理想的。
分层树视图:
<TreeView x:Name="MainTreeView">
<TreeViewItem x:Name="RobotTreeViewItemOwner" Header="Robots" ItemsSource="{Binding Robots}">
<TreeViewItem.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Robot}" ItemsSource="{Binding Processes}">
</HierarchicalDataTemplate>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem x:Name="BookTreeViewItemOwner" Header="Books" ItemsSource="{Binding Books}">
<TreeViewItem.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Book}" ItemsSource="{Binding Pages}">
</HierarchicalDataTemplate>
</TreeViewItem>
</TreeViewItem>
</TreeView>
以下代码绑定的级别比我要查找的级别高。有没有办法为实际的机器人或书籍物品复制这个?
<MenuItem DataContext="{Binding ElementName=BookTreeViewItemOwner}" Header="Print Book" Visibility="{Binding IsSelected, Converter={StaticResource IsBook}}" />
绑定到 Treeview 根目录下的 SelectedItem 并使用转换器检查类型是否正确。
<MenuItem Header="Print Book" Visibility="{Binding ElementName=MainTreeView, Path=SelectedItem, Converter={StaticResource IsBookSelectedConverter}}"/>
转换器的代码段
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Book)
{
return true;
}
return false;
}
您可以通过监听 TreeView (https://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.selecteditemchanged%28v=vs.110%29.aspx) 的 SelectedItemChanged 事件来解决这个问题。
private void SelectionChanged(object sender, RoutedPropertyChangedEventArgs<Object> e)
{
TreeViewItem selectedItem =e.NewValue as TreeViewItem
// Inspect to get the type of the selected item and update your menus
}
这将允许您以编程方式根据需要进行调用以设置菜单可见性。
我有一个分层树视图,其中包含绑定到不同级别的多种类型的项目。我需要知道选择了什么类型的项目。项目的类型将决定菜单在应用程序其他地方的可见性。
我知道我不能给分层项目命名,否则这将是理想的。
分层树视图:
<TreeView x:Name="MainTreeView">
<TreeViewItem x:Name="RobotTreeViewItemOwner" Header="Robots" ItemsSource="{Binding Robots}">
<TreeViewItem.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Robot}" ItemsSource="{Binding Processes}">
</HierarchicalDataTemplate>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem x:Name="BookTreeViewItemOwner" Header="Books" ItemsSource="{Binding Books}">
<TreeViewItem.Resources>
<HierarchicalDataTemplate DataType="{x:Type local:Book}" ItemsSource="{Binding Pages}">
</HierarchicalDataTemplate>
</TreeViewItem>
</TreeViewItem>
</TreeView>
以下代码绑定的级别比我要查找的级别高。有没有办法为实际的机器人或书籍物品复制这个?
<MenuItem DataContext="{Binding ElementName=BookTreeViewItemOwner}" Header="Print Book" Visibility="{Binding IsSelected, Converter={StaticResource IsBook}}" />
绑定到 Treeview 根目录下的 SelectedItem 并使用转换器检查类型是否正确。
<MenuItem Header="Print Book" Visibility="{Binding ElementName=MainTreeView, Path=SelectedItem, Converter={StaticResource IsBookSelectedConverter}}"/>
转换器的代码段
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value is Book)
{
return true;
}
return false;
}
您可以通过监听 TreeView (https://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.selecteditemchanged%28v=vs.110%29.aspx) 的 SelectedItemChanged 事件来解决这个问题。
private void SelectionChanged(object sender, RoutedPropertyChangedEventArgs<Object> e)
{
TreeViewItem selectedItem =e.NewValue as TreeViewItem
// Inspect to get the type of the selected item and update your menus
}
这将允许您以编程方式根据需要进行调用以设置菜单可见性。