以下之间有什么区别:
所有这些依赖属性都在 Selector 中定义。类(class)。我经常将 SelectedItem
与 SelectedValue
混淆,将 SelectedValue
与 SelectedValuePath
混淆。
我想知道它们之间的区别,以及我们什么时候使用它们,特别是 SelectedValue
和 SelectedValuePath
。请用一些简单的例子解释它们的用途。
最佳答案
他们的名字可能有点令人困惑:)。总结如下:
SelectedItem 属性返回列表绑定(bind)到的整个对象。假设您已将列表绑定(bind)到
Category
对象的集合(每个 Category 对象都具有 Name 和 ID 属性)。例如。ObservableCollection<Category>
。SelectedItem
属性将返回当前选定的Category
对象。然而,出于绑定(bind)目的,这并不总是您想要的,因为这只能使您将整个 Category 对象绑定(bind)到列表绑定(bind)到的属性,而不是该 Category 对象上的单个属性的值(例如其ID
属性)。因此,我们将 SelectedValuePath 属性和 SelectedValue 属性作为另一种绑定(bind)方式(将它们结合使用)。假设您有一个
Product
对象,您的 View 绑定(bind)到该对象(具有 ProductName、Weight 等属性)。还假设您在该 Product 对象上有一个CategoryID
属性,并且您希望用户能够从类别列表中选择产品的类别。您需要将 Category 对象的 ID 属性分配给 Product 对象的CategoryID
属性。这就是SelectedValuePath
和SelectedValue
属性的用武之地。您指定应使用SelectedValuePath='ID'
将 Category 对象上的 ID 属性分配给列表绑定(bind)到的 Product 对象上的属性,然后将SelectedValue
属性绑定(bind)到该属性在 DataContext(即产品)上。
下面的示例演示了这一点。我们有一个绑定(bind)到类别列表的组合框(通过 ItemsSource)。我们将 Product 上的 CategoryID 属性绑定(bind)为选定值(使用 SelectedValue 属性)。我们通过 SelectedValuePath 属性将其与类别的 ID 属性相关联。我们说的是仅在 ComboBox 中显示 Name 属性以及 DisplayMemberPath 属性)。
<ComboBox ItemsSource="{Binding Categories}"
SelectedValue="{Binding CategoryID, Mode=TwoWay}"
SelectedValuePath="ID"
DisplayMemberPath="Name" />
public class Category
{
public int ID { get; set; }
public string Name { get; set; }
}
public class Product
{
public int CategoryID { get; set; }
}
一开始有点令人困惑,但希望这能让它变得更清晰......:)
克里斯
关于wpf - SelectedItem、SelectedValue 和 SelectedValuePath 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4902039/