wpf - SelectedItem、SelectedValue 和 SelectedValuePath 之间的区别

标签 wpf silverlight xaml selecteditem selectedvalue

以下之间有什么区别:

所有这些依赖属性都在 Selector 中定义。类(class)。我经常将 SelectedItemSelectedValue 混淆,将 SelectedValueSelectedValuePath 混淆。

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

最佳答案

他们的名字可能有点令人困惑:)。总结如下:

  • 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 属性。这就是 SelectedValuePathSelectedValue 属性的用武之地。您指定应使用 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/

相关文章:

wpf - Horizo​​ntalAlignment=拉伸(stretch)、最大宽度、左对齐同时?

wpf - 附加属性的各种用途是什么?

c# - 绑定(bind)更新问题

c# - 以编程方式获取当前列的宽度和高度?

c# - 在用户操作时显示/隐藏列表框项目

c# - 如何在 WPF 中制作 TextBlock 滚动条

wpf - WPF/Silverlight 能否生成独立的可执行文件?

xaml - Windows Phone - 禁用按钮背景

wpf - 用户控制 : Can I set my own DependencyProperty in XAML?

wpf - 在wpf中如何访问用户控件中的window.resources