XAML 选定项、选定值和选定值路径之间的差异

wlzqhblo  于 2022-12-07  发布在  其他
关注(0)|答案(5)|浏览(166)

以下两者之间的区别是什么:

所有这些依赖属性都是在Selector类中定义的,我经常把SelectedItemSelectedValue混淆,把SelectedValueSelectedValuePath混淆。
我想知道它们之间的区别,以及我们在什么时候使用它们,特别是SelectedValueSelectedValuePath。请用一些简单的例子解释它们的 * 用途 *。

yshpjwxd

yshpjwxd1#

他们的名字可能有点混乱:).这里有一个总结:

  • SelectedItem**属性返回列表绑定到的整个对象。(每个Category对象都有Name和ID属性)。例如ObservableCollection<Category>SelectedItem属性将返回当前选定的Category对象。但是,对于绑定目的,这并不总是您想要的,因为这样只能将整个Category对象绑定到列表所绑定到的属性,而不能将该Category对象上的单个属性值(例如其ID属性)绑定到该属性。
  • 因此,我们使用SelectedValuePath属性和SelectedValue属性作为绑定的替代方法(您可以将它们结合使用)。假设您有一个Product对象,您的视图将绑定到该对象(带有ProductName、Weight等属性)。假设您在Product对象上有一个CategoryID属性,并且您希望用户能够从类别列表中选择产品的类别,则需要将Category对象的ID属性分配给Product对象的CategoryID属性,这就是SelectedValuePathSelectedValue属性的作用所在。您可以指定Category对象上的ID属性应该指派给Product对象上的属性,清单是使用SelectedValuePath='ID'系结至该对象,然后将SelectedValue属性系结至DataContext(亦即Product)上的属性。

下面的示例演示了这一点。我们有一个绑定到类别列表的ComboBox(通过ItemsSource)。我们将Product上的CategoryID属性绑定为选定的值(使用SelectedValue属性)。我们通过SelectedValuePath属性将其与Category的ID属性关联起来。我们说在ComboBox中只显示Name属性,使用DisplayMemberPath属性。
第一个
这是一个有点混乱的开始,但希望这使它更清楚一点...:)
克里斯

g9icjywg

g9icjywg2#

从概念上回答:
SelectedValuePath定义绑定到ListBox的ItemsSource的对象的哪个属性(按其名称)将用作项目的SelectedValue
例如,如果ListBox绑定到Person对象的集合,其中每个对象都具有NameAgeGender属性,则SelectedValuePath=Name将导致所选PersonName属性值在SelectedValue中返回。

  • 请注意,如果您覆写ListBox的ControlTemplate(或套用Style)来指定应该显示的属性,就无法使用SelectedValuePath。*

同时,SelectedItem会传回目前选取的整个Person对象。
(Here的a further example from MSDN,使用TreeView)

***更新:***正如@Joe所指出的,DisplayMemberPath属性与Selected * 属性无关。其正确说明如下:

请注意,这些值与DisplayMemberPath(定义于ItemsControl而非Selector)不同,但该属性的行为与SelectedValuePath类似:在缺少样式/模板的情况下,它标识绑定到item的对象的哪个属性应用作其字符串表示。

fhity93d

fhity93d3#

其中,SelectedItemSelectedValueobject,而SelectedValuePathstring
例如使用列表框:
listbox1.SelectedValue以下的值变为字符串值。

string value = listbox1.SelectedValue;

如果你说给予me listbox1.SelectedItem它会给你整个对象。

ListItem item = listbox1.SelectedItem;
string value = item.value;
uqdfh47h

uqdfh47h4#

受到这个问题的启发,我写了一篇沿着code snippet here的博客。
SelectedItem -选定项有助于绑定将显示的数据源中的实际值。这是对象类型,我们可以将从对象类型派生的任何类型与此属性绑定。由于在这种情况下我们将对组合框使用MVVM绑定,因此这是可用于通知VM已选择项的属性。
SelectedValue和SelectedValuePath --这是组合框的两个最容易混淆和误解的属性。但是,当我们想把组合框与已经创建的对象的值绑定时,这些属性就可以派上用场了。请查看下面列表中的最后一个场景,以获得关于这些属性的简要概念。

fd3cxomn

fd3cxomn5#

每个使用集合存储数据的控件都具有SelectedValue、SelectedItem属性。这些控件的示例有ListBox、Dropdown、RadioButtonList、CheckBoxList。
更具体地说,如果你真的想检索所选项的文本,那么你可以写:

ListBox1.SelectedItem.Text;

如果值之前已设置为SelectedValue属性,则ListBox1还可以使用SelectedValue属性返回Text但以上是获取文本更有效方法
现在,值是用户不可见的东西,但它主要用于存储在数据库中。我们不插入ListBox1的文本,但我们也可以插入它,但我们习惯于插入选定项的值。要获得值,我们可以使用

ListBox1.SelectedValue

Source

相关问题