Wpf TreeView SelectedItem返回类型
我有一个TreeView,它使用HierarchycalDataTemplate和视图模型作为不同节点上的数据上下文。我想从TreeView.SelectedItem访问一些TreeView项目属性,但这会返回一个视图模型对象,而不是TreeView项目。Wpf TreeView SelectedItem返回类型,wpf,treeview,selecteditem,treeviewitem,Wpf,Treeview,Selecteditem,Treeviewitem,我有一个TreeView,它使用HierarchycalDataTemplate和视图模型作为不同节点上的数据上下文。我想从TreeView.SelectedItem访问一些TreeView项目属性,但这会返回一个视图模型对象,而不是TreeView项目。 如何获取选定项目的TreeViewItem引用? (SelectedItemChanged处理程序中也存在同样的问题-对象发送方是视图模型-如何获取TreeViewItem? [有一个TreeView属性SelectedContainer返回
如何获取选定项目的TreeViewItem引用?
(SelectedItemChanged处理程序中也存在同样的问题-对象发送方是视图模型-如何获取TreeViewItem?
[有一个TreeView属性SelectedContainer返回一个TreeView项目,但它不可访问:-(]
世界粮食计划署令人沮丧的是,它很容易陷入这种“细节”中似乎必须有一个简单/明显的解决方案,但…一旦将TreeView绑定到数据上下文,您将始终返回视图模型对象。如果您希望操作TreeView对象以响应事件,则需要通过绑定来完成。例如,IsExpanded、IsSelected属性可以绑定到view mod下面的代码自动加粗选定的树项目,并绑定上述属性以查看模型属性,我可以在其中操作/读取它们
<TreeView x:Name="treeEquipment"
ItemsSource="{Binding RootEquipment}"
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="TreeViewItem.MouseRightButtonDown"
Handler="TreeViewItem_MouseRightButtonDown"/>
<Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" />
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
<Setter Property="FontWeight" Value="Normal" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="FontWeight" Value="Bold" />
</Trigger>
</Style.Triggers>
</Style>
</TreeView.ItemContainerStyle>
我试图设置的属性已被选中,我一直希望该属性为false,因为我自己管理多个选择。以下StrayPointers建议适用于视图模式上的绑定:
class TreeNodeViewMode {
public bool no_selection {
get { return false; }
set { RaisePropertyChanged(); }
}
}
XAML:
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding no_selection, Mode=TwoWay}" />
</Style>
</TreeView.ItemContainerStyle>
另一种方法是处理TreeView.Selected事件,它不同于TreeView.SelectedItemChanged(它获取传入的视图模型),它通过以下方式获取TreeView.SelectedItem:
TreeViewItem item = e.OriginalSource as TreeViewItem;
这将启用属性设置,例如
TreeViewItem item = e.OriginalSource as TreeViewItem;
if (item != null) {
item.Focus();
item.IsSelected = false;
}
可能是重复的感谢。事实上,我正试图禁用树节点的选择(因为我自己管理多个选择)。因此绑定到总是返回false的视图模型属性是有效的。对于@Ricibob,您是否实际使用了控件绑定到的SelectedItem属性?(如果是,如何?我也在同一条船上)@UB3571否我没有访问SelectedItem属性,但按照StrayPointer的建议访问了该属性,并将所需的TreeViewItem字段“映射”到具有绑定的视图模型对象,然后通过视图模型对象访问它们。