以下两者之间的区别是什么:
所有这些依赖属性都是在Selector类中定义的,我经常把SelectedItem和SelectedValue混淆,把SelectedValue和SelectedValuePath混淆。我想知道它们之间的区别,以及我们在什么时候使用它们,特别是SelectedValue和SelectedValuePath。请用一些简单的例子解释它们的 * 用途 *。
SelectedItem
SelectedValue
SelectedValuePath
yshpjwxd1#
他们的名字可能有点混乱:).这里有一个总结:
ObservableCollection<Category>
Category
ID
Product
CategoryID
SelectedValuePath='ID'
下面的示例演示了这一点。我们有一个绑定到类别列表的ComboBox(通过ItemsSource)。我们将Product上的CategoryID属性绑定为选定的值(使用SelectedValue属性)。我们通过SelectedValuePath属性将其与Category的ID属性关联起来。我们说在ComboBox中只显示Name属性,使用DisplayMemberPath属性。第一个这是一个有点混乱的开始,但希望这使它更清楚一点...:)克里斯
g9icjywg2#
从概念上回答:SelectedValuePath定义绑定到ListBox的ItemsSource的对象的哪个属性(按其名称)将用作项目的SelectedValue。例如,如果ListBox绑定到Person对象的集合,其中每个对象都具有Name、Age和Gender属性,则SelectedValuePath=Name将导致所选Person的Name属性值在SelectedValue中返回。
ItemsSource
Person
Name
Age
Gender
SelectedValuePath=Name
同时,SelectedItem会传回目前选取的整个Person对象。(Here的a further example from MSDN,使用TreeView)
***更新:***正如@Joe所指出的,DisplayMemberPath属性与Selected * 属性无关。其正确说明如下:
请注意,这些值与DisplayMemberPath(定义于ItemsControl而非Selector)不同,但该属性的行为与SelectedValuePath类似:在缺少样式/模板的情况下,它标识绑定到item的对象的哪个属性应用作其字符串表示。
DisplayMemberPath
fhity93d3#
其中,SelectedItem和SelectedValue是object,而SelectedValuePath是string。例如使用列表框:listbox1.SelectedValue以下的值变为字符串值。
object
string
listbox1.SelectedValue
string value = listbox1.SelectedValue;
如果你说给予me listbox1.SelectedItem它会给你整个对象。
listbox1.SelectedItem
ListItem item = listbox1.SelectedItem; string value = item.value;
uqdfh47h4#
受到这个问题的启发,我写了一篇沿着code snippet here的博客。SelectedItem -选定项有助于绑定将显示的数据源中的实际值。这是对象类型,我们可以将从对象类型派生的任何类型与此属性绑定。由于在这种情况下我们将对组合框使用MVVM绑定,因此这是可用于通知VM已选择项的属性。SelectedValue和SelectedValuePath --这是组合框的两个最容易混淆和误解的属性。但是,当我们想把组合框与已经创建的对象的值绑定时,这些属性就可以派上用场了。请查看下面列表中的最后一个场景,以获得关于这些属性的简要概念。
fd3cxomn5#
每个使用集合存储数据的控件都具有SelectedValue、SelectedItem属性。这些控件的示例有ListBox、Dropdown、RadioButtonList、CheckBoxList。更具体地说,如果你真的想检索所选项的文本,那么你可以写:
ListBox1.SelectedItem.Text;
如果值之前已设置为SelectedValue属性,则ListBox1还可以使用SelectedValue属性返回Text但以上是获取文本更有效方法现在,值是用户不可见的东西,但它主要用于存储在数据库中。我们不插入ListBox1的文本,但我们也可以插入它,但我们习惯于插入选定项的值。要获得值,我们可以使用
ListBox1.SelectedValue
Source
5条答案
按热度按时间yshpjwxd1#
他们的名字可能有点混乱:).这里有一个总结:
ObservableCollection<Category>
。SelectedItem
属性将返回当前选定的Category
对象。但是,对于绑定目的,这并不总是您想要的,因为这样只能将整个Category对象绑定到列表所绑定到的属性,而不能将该Category对象上的单个属性值(例如其ID
属性)绑定到该属性。Product
对象,您的视图将绑定到该对象(带有ProductName、Weight等属性)。假设您在Product对象上有一个CategoryID
属性,并且您希望用户能够从类别列表中选择产品的类别,则需要将Category对象的ID属性分配给Product对象的CategoryID
属性,这就是SelectedValuePath
和SelectedValue
属性的作用所在。您可以指定Category对象上的ID属性应该指派给Product对象上的属性,清单是使用SelectedValuePath='ID'
系结至该对象,然后将SelectedValue
属性系结至DataContext(亦即Product)上的属性。下面的示例演示了这一点。我们有一个绑定到类别列表的ComboBox(通过ItemsSource)。我们将Product上的CategoryID属性绑定为选定的值(使用SelectedValue属性)。我们通过SelectedValuePath属性将其与Category的ID属性关联起来。我们说在ComboBox中只显示Name属性,使用DisplayMemberPath属性。
第一个
这是一个有点混乱的开始,但希望这使它更清楚一点...:)
克里斯
g9icjywg2#
从概念上回答:
SelectedValuePath
定义绑定到ListBox的ItemsSource
的对象的哪个属性(按其名称)将用作项目的SelectedValue
。例如,如果ListBox绑定到
Person
对象的集合,其中每个对象都具有Name
、Age
和Gender
属性,则SelectedValuePath=Name
将导致所选Person
的Name
属性值在SelectedValue
中返回。SelectedValuePath
。*同时,
SelectedItem
会传回目前选取的整个Person
对象。(Here的a further example from MSDN,使用TreeView)
***更新:***正如@Joe所指出的,DisplayMemberPath属性与Selected * 属性无关。其正确说明如下:
请注意,这些值与
DisplayMemberPath
(定义于ItemsControl而非Selector)不同,但该属性的行为与SelectedValuePath
类似:在缺少样式/模板的情况下,它标识绑定到item的对象的哪个属性应用作其字符串表示。fhity93d3#
其中,
SelectedItem
和SelectedValue
是object
,而SelectedValuePath
是string
。例如使用列表框:
listbox1.SelectedValue
以下的值变为字符串值。如果你说给予me
listbox1.SelectedItem
它会给你整个对象。uqdfh47h4#
受到这个问题的启发,我写了一篇沿着code snippet here的博客。
SelectedItem -选定项有助于绑定将显示的数据源中的实际值。这是对象类型,我们可以将从对象类型派生的任何类型与此属性绑定。由于在这种情况下我们将对组合框使用MVVM绑定,因此这是可用于通知VM已选择项的属性。
SelectedValue和SelectedValuePath --这是组合框的两个最容易混淆和误解的属性。但是,当我们想把组合框与已经创建的对象的值绑定时,这些属性就可以派上用场了。请查看下面列表中的最后一个场景,以获得关于这些属性的简要概念。
fd3cxomn5#
每个使用集合存储数据的控件都具有SelectedValue、SelectedItem属性。这些控件的示例有ListBox、Dropdown、RadioButtonList、CheckBoxList。
更具体地说,如果你真的想检索所选项的文本,那么你可以写:
如果值之前已设置为SelectedValue属性,则ListBox1还可以使用SelectedValue属性返回Text但以上是获取文本更有效方法
现在,值是用户不可见的东西,但它主要用于存储在数据库中。我们不插入ListBox1的文本,但我们也可以插入它,但我们习惯于插入选定项的值。要获得值,我们可以使用
Source