"SelectedItem"、"SelectedValue"和"SelectedValuePath"之间的区别

17 浏览
0 Comments

"SelectedItem"、"SelectedValue"和"SelectedValuePath"之间的区别

以下三个有什么不同:

这些依赖属性都在Selector类中定义。我经常混淆SelectedItemSelectedValue,以及SelectedValueSelectedValuePath

我想知道它们之间的区别,以及我们什么时候使用它们,尤其是SelectedValueSelectedValuePath。请用一些简单的示例来解释它们的用途。

admin 更改状态以发布 2023年5月23日
0
0 Comments

更加概念性地回答一下:

SelectedValuePath定义了绑定到ListBox的ItemsSource的对象的哪个属性(通过其名称)将被用作项目的SelectedValue

例如,如果您的ListBox绑定到一个Person对象的集合,每个对象都有NameAgeGender属性,那么SelectedValuePath=Name将使所选PersonName属性的值返回到SelectedValue

请注意,如果您覆盖ListBox的ControlTemplate(或应用样式),指定应显示什么属性,SelectedValuePath无法使用。

与此同时,SelectedItem会返回当前选中的整个Person对象。

(这里是从MSDN中进一步的例子,使用TreeView)

更新:正如@Joe指出的那样,DisplayMemberPath属性与Selected*属性无关。它的适当描述如下:

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

0
0 Comments

它们的名称可能会有点令人困惑 :). 这里是一个摘要:

  • SelectedItem属性返回绑定的整个对象。所以说,您已经将一个列表绑定到一个包含Name和ID属性的Category对象集合上(例如ObservableCollection)。选定的SelectedItem属性会返回当前选定的Category对象。但是,出于绑定目的,并不总是需要这样做,因为这仅使您能够将整个Category对象绑定到列表绑定的属性,而不是绑定到该Category对象的单个属性(例如它的ID属性)。

  • 因此,我们有SelectedValuePath属性和SelectedValue属性作为另一种绑定方式(您在一起使用它们)。假设您有一个Product对象,您的视图是绑定到该对象的(有关产品名称、重量等属性)。假设该Product对象有一个CategoryID属性,您希望用户从类别列表中选择该产品的类别。您需要将Category对象的ID属性分配给Product对象上的CategoryID属性。这就是SelectedValuePath属性和SelectedValue属性发挥作用的地方。您指定要将Category对象上的ID属性分配给Product对象上绑定到列表的属性,使用SelectedValuePath='ID',然后将SelectedValue属性绑定到DataContext(即Product)上的属性。

下面的示例演示了这一点。我们将ComboBox绑定到Category列表(通过ItemsSource)。我们将Product的CategoryID属性绑定为选定的值(使用SelectedValue属性)。我们将其与Category的ID属性关联,通过SelectedValuePath属性。我们还使用DisplayMemberPath属性指定只在ComboBox中显示Name属性。



public class Category
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class Product
{
    public int CategoryID { get; set; }
}

一开始可能有点混淆,但希望这能让事情变得更加清晰... 🙂

Chris

0