我有一个 TreeView,它使用 HierarchicalDataTemplate 和 View 模型作为不同节点上的数据上下文。我想从 TreeView.SelectedItem 访问一些 TreeViewItem 属性 - 但这返回一个 View 模型对象而不是 TreeViewItem。
如何获取对所选项目的 TreeViewItem 引用?
(我在 SelectedItemChanged 处理程序中遇到同样的问题 - 对象发送者是 View 模型 - 如何获取 TreeViewItem?)
[有一个 TreeView 属性 SelectedContainer 它返回一个 TreeViewItem 但它不可访问:-( ]
粮食计划署令人沮丧的事情是,很容易陷入这种“细节”,而且似乎必须有一个简单/明显的解决方案,但是......
最佳答案
将 TreeView 绑定(bind)到数据上下文后,您将始终获得 View 模型对象。如果要操作 TreeViewItem 对象来响应事件,则需要通过绑定(bind)来完成。例如,可以使用样式将 IsExpanded、IsSelected 属性绑定(bind)到 View 模型属性。以下代码自动将选定的树项目加粗,并将上述属性绑定(bind)到 View 模型属性,我可以在其中操作/读取它们。
<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>
关于wpf - TreeView SelectedItem 返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9481231/