有关TreeView.SelectedItem可绑定性的MSDN文档

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关TreeView.SelectedItem可绑定性的MSDN文档相关的知识,希望对你有一定的参考价值。

似乎对于TreeView,属性SelectedItem不能用于绑定。我试图了解这如何与MSDN文档保持一致。

关于https://msdn.microsoft.com/en-us/library/system.windows.controls.treeview.selecteditem.aspx,它说的是Treeview.SelectedItem财产:

[BindableAttribute(true)]
public object SelectedItem { get; }

然后,这个https://msdn.microsoft.com/en-us/library/system.componentmodel.bindableattribute.aspx在“备注”下说:

如果某个属性已标记为BindableAttribute设置为true,则应为该属性引发属性更改通知。这意味着如果Bindable属性是Yes,则支持双向数据绑定。如果BindableNo,您仍然可以绑定到该属性,但它不应该显示在要绑定的默认属性集中,因为它可能会或可能不会引发属性更改通知。

我把它读成“如果你的属性将BindableAttribute设置为true,你可以绑定它;无论将哪个值设置为Bindable。” Bindable未列入[...]SelectedItem部分,我认为这意味着Bindable将设置为No

所以根据文档,绑定到SelectedItem应该工作,对吧?还是我误解了什么?如果有,那是什么?

如果我写

<TreeView SelectedItem="{Binding foo, Mode=OneWayToSource}" />

它说“SelectedItem财产没有可访问的二传手。” (原文:“SelectedItem property”没有可以访问的setter对象。)

但现在我又困惑了 - 我告诉它只使用OneWayToSource绑定,这意味着SelectedItem的变化反映在foo,但不是相反。那为什么它甚至关心二传手呢?见OneWayToSource binding from readonly property in XAMLPushing read-only GUI properties back into ViewModel

答案

SelectedItem仅是对当前所选项目的引用。您需要定义SelectedItemPath和DisplayMemberPath的属性,然后通过ItemsSource将TreeView绑定到集合。像这样:

<TreeView ItemsSource="{Binding MyCollection}" DisplayMemberPath="Name" SelectedValuePath="Id" />

DisplayMemberPath - 将在GUI控件上显示哪个属性(即客户名称)SelectedValuePath - 哪个属性将是所选项的值(通常为ID)

编辑:只想指向SelectedItem中的“get”only属性

以上是关于有关TreeView.SelectedItem可绑定性的MSDN文档的主要内容,如果未能解决你的问题,请参考以下文章

WPF MVVM TreeView SelectedItem

Silverlight Treeview SelectedItem TwoWay 绑定导致混合错误

带有 TextBox 子项的 TreeView SelectedItem 行为

Treeview selectedItem 在启动时突出显示

Xamarin Forms 可绑定属性与普通属性

从 ViewModel Xamarin 中的动态表单中获取条目值