gpt4 book ai didi

wpf - 如何根据我的数据绑定(bind)在我的 WPF ComboBox 中选择一个项目?

转载 作者:行者123 更新时间:2023-12-04 14:52:54 25 4
gpt4 key购买 nike

我已将 DataContext 设置为 Book 对象。书籍具有属性:标题、类别。

我有一个包含类别列表的 CollectionViewSource“categoryList”。

问题 : 如何在此组合框中选择图书的类别?

<TextBox Text="{Binding Path=Title}"/>

<ComboBox SelectedValuePath="Id"
SelectedValue="{Binding Path=Category.Id}"
SelectedItem="{Binding Path=Category}"
ItemsSource="{Binding Source = {StaticResource categoryList}}"
DisplayMemberPath="Name" />

上面的代码正确显示了图书的标题,然后在组合框中显示了类别名称列表。但它没有选择图书的类别。它只是选择列表中的第一项。

最佳答案

你绑定(bind)太多了;你只需要设置SelectedValueSelectedValuePath , 或 SelectedItem .在这种情况下,看起来您实际上是在尝试绑定(bind)到特定对象。如果您想拥有 ComboBox设置Category您的 Book 上的属性(property)和当前 Book对象实际上有一个对 Category 的引用categoryList 中的实例, 那么你应该使用 SelectedItem绑定(bind)并删除 SelectedValue 的绑定(bind)和 SelectedValuePath .

编辑

要详细说明这是如何完成的,SelectedValue设计用于当您有一条通用信息将绑定(bind)的项目与列表源上的属性链接时使用。例如,假设我有一个 Book带有 CategoryID 的类属性(property)。

public class Book
{
public string CategoryID { get; set; }
public string Title { get; set; }
}

public class CategoryID
{
public string ID { get; set; }
public string Name { get; set; }
}

在这种情况下,你会这样做:
<ComboBox SelectedValue = "{Binding CategoryID}"
SelectedValuePath = "ID"
DisplayMemberPath = "Name" />
SelectedItem另一方面,当绑定(bind)实例具有对绑定(bind)列表中项目的实际引用(或者,更准确地说,是等效于)的对象时。所以,让我们假设 Book类实际上看起来像这样:
public class Book
{
public Category Category { get; set; }
public string Title { get; set; }
}

在这种情况下,你会这样做:
<ComboBox SelectedItem = "{Binding Category}"
DisplayMemberPath = "Name" />

但非常重要的是要注意 这将不起作用,除非 Book类引用了 Category 的同一实例正如您在列表中的 .如果引用不同(即使类上的值相等),那么这将不起作用,因为 ComboBox将无法找到 Category Book 中引用在列表中。

您将其绑定(bind)到顶部的方式(通过绑定(bind)到 Category.ID )的真正问题是您正在混合这些方案。您有一个引用,但您试图绑定(bind)键。所有这一切都会尝试设置您的引用值, 它不会尝试更改您类(class)的引用 .

关于wpf - 如何根据我的数据绑定(bind)在我的 WPF ComboBox 中选择一个项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1837539/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com