查看 MSDN 上的TreeView.SelectedItem 属性页。
您可以直接绑定到TreeView.SelectedItem
属性:
<TreeView ItemsSource="{Binding Items}" SelectedItem="{Binding Item, Mode=OneWay}" />
请注意,该TreeView.SelectedItem
属性是只读的,因此您必须使用OneWay
绑定...这意味着您无法从视图模型中设置所选项目。为此,您需要使用Attached Property
.
编辑>>>
抱歉@Scroog1,我通常使用 anAttachedProperty
来执行此操作。您是对的,即使使用OneWay
绑定,使用此方法也会出错。不幸的是,我的AttachedProperty
代码很长,但是还有另一种方法可以做到这一点。
我不一定推荐这样做,因为将 UI 属性放入数据对象从来都不是一个好主意,但是如果您将IsSelected
属性添加到数据对象,则可以将其直接绑定到TreeViewItem.IsSelected
属性:
<TreeView ItemsSource="Items" HorizontalAlignment="Stretch" ... Name="MyTreeViewMenu">
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
我刚刚在 StackOverflow 上的WPF MVVM TreeView SelectedItem帖子中搜索并为您找到了一个“更全面”的答案。
或者,还有另一种方法......您也可以使用TreeView.SelectedValue
andTreeView.SelectedValuePath
属性。基本思想是将属性设置为TreeView.SelectedValuePath
数据对象上的属性名称。选择一个项目后,该TreeView.SelectedValue
属性将设置为所选数据项的该属性的值。您可以从MSDN 上的如何:使用 SelectedValue、SelectedValuePath 和 SelectedItem页面了解有关此方法的更多信息。如果您具有唯一可识别的属性(例如某种标识符),这通常最有效。此代码示例来自 MSDN:
<TreeView ItemsSource="{Binding Source={StaticResource myEmployeeData},
XPath=EmployeeInfo}" Name="myTreeView" SelectedValuePath="EmployeeNumber" />
<TextBlock Margin="10">SelectedValuePath: </TextBlock>
<TextBlock Margin="10,0,0,0" Text="{Binding ElementName=myTreeView,
Path=SelectedValuePath}" Foreground="Blue"/>
<TextBlock Margin="10">SelectedValue: </TextBlock>
<TextBlock Margin="10,0,0,0" Text="{Binding ElementName=myTreeView,
Path=SelectedValue}" Foreground="Blue"/>