在 WPF 中绑定 Combobox 的 SelectedItem。

11 浏览
0 Comments

在 WPF 中绑定 Combobox 的 SelectedItem。

以下三者之间有何不同:

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

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

admin 更改状态以发布 2023年5月22日
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属性返回整个对象,您的列表绑定到该对象。因此,假设您已将列表绑定到Category对象的集合(每个Category对象都具有Name和ID属性)。例如:ObservableCollectionSelectedItem属性将返回您当前选择的Category对象。然而,对于绑定的目的,这并不总是您想要的,因为这只能使您将整个Category对象绑定到列表绑定到的属性,而不是该Category对象上单个属性的值(例如其ID属性)。

  • 因此,我们有SelectedValuePath属性和SelectedValue属性作为替代绑定的手段(您可以将它们与彼此配合使用)。假设您有一个视图绑定到Product对象(其中包含像ProductName、Weight等属性),还假设您在该Product对象上有一个CategoryID属性,并且您希望用户能够从类别列表中选择产品的类别。您需要将Category对象的ID属性分配给Product对象上的CategoryID属性。这就是SelectedValuePathSelectedValue属性发挥作用的地方。您指定Category对象上的ID属性应分配给列表绑定到的属性上的Product对象上的属性使用SelectedValuePath='ID',然后将SelectedValue属性绑定到DataContext(即Product)上的属性。

下面的示例演示了这一点。我们将ComboBox绑定到一组类别(通过ItemsSource),将Product的CategoryID属性作为选定值绑定(使用SelectedValue属性)。我们通过SelectedValuePath属性将它与Category的ID属性相关联。并且我们只在ComboBox中显示Name属性,使用DisplayMemberPath属性。



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

一开始可能有点令人困惑,但希望这让事情变得更清晰... 🙂

Chris

0