SelectedItem、SelectedValue和SelectedValuePath的差异

admin
2026-06-14 04:08:27

它们的名字可能有点混乱:)。以下是一个总结:

SelectedItem属性返回列表绑定到的整个对象。因此,假设您已经将一个列表绑定到一个Category对象集合(每个类别对象都具有名称和ID属性)。例如:ObservableCollection。SelectedItem属性将返回当前选定的Category对象。但是,为了绑定目的,这并不总是您想要的,因为这只允许您将整个类别对象绑定到列表绑定到的属性,而不是绑定到该类别对象(例如其ID属性)上的单个属性的值。因此,我们使用SelectedValuePath属性和SelectedValue属性作为另一种绑定方式(您可以将它们结合在一起使用)。假设您有一个Product对象,您的视图是绑定到的( ProductName、say等的属性)。我们还假设您在这个Product上有一个CategoryID属性,并且您希望用户能够从一个类别列表中为产品选择一个类别。需要将类别对象的ID属性分配给Product上的CategoryID属性。这就是SelectedValuePath和SelectedValue属性出现的地方。指定应将类别对象上的ID属性分配给列表绑定到的产品对象上的属性,然后将SelectedValue属性绑定到DataContext上的属性(即。(产品)。下面的示例说明了这一点。我们有一个绑定到类别列表的ComboBox (通过ItemsSource)。我们将产品上的CategoryID属性绑定为选定的值(使用SelectedValue属性)。我们通过SelectedValuePath属性将其与类别的ID属性相关联。我们说的是只在ComboBox中显示Name属性,并使用DisplayMemberPath属性)。

代码语言:javascript复制

SelectedValue="{Binding CategoryID, Mode=TwoWay}"

SelectedValuePath="ID"

DisplayMemberPath="Name" />代码语言:javascript复制public class Category

{

public int ID { get; set; }

public string Name { get; set; }

}

public class Product

{

public int CategoryID { get; set; }

}一开始有点让人困惑,但希望这能让事情变得更清楚.:)

克里斯