有关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
,则支持双向数据绑定。如果Bindable
是No
,您仍然可以绑定到该属性,但它不应该显示在要绑定的默认属性集中,因为它可能会或可能不会引发属性更改通知。
我把它读成“如果你的属性将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 XAML,Pushing 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 行为