您绑定了太多内容;您只需要设置
SelectedValue
和
SelectedValuePath
或
SelectedItem
。在这种情况下,看起来您实际上是要绑定到特定对象。如果您想让
ComboBox
设置您的
Book
上的
Category
属性,并且当前的
Book
对象实际上引用了
categoryList
中的一个
Category
实例,则应使用
SelectedItem
绑定并删除
SelectedValue
和
SelectedValuePath
的绑定。
编辑
稍微解释一下如何完成此操作,SelectedValue
旨在在您的绑定项与列表源上的属性之间存在公共信息时使用。例如,假设我有一个带有CategoryID
属性的Book
类。
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
是用于绑定实例与绑定列表中实际引用(或更精确地说,等同于)项目的情况。因此,假设Book
类实际上看起来像这样:
public class Book
{
public Category Category { get; set; }
public string Title { get; set; }
}
在这种情况下,你需要执行以下操作:
<ComboBox SelectedItem = "{Binding Category}"
DisplayMemberPath = "Name" />
但是需要注意的是,
只有当Book类引用与列表中的Category实例相同时,这才能起作用。如果引用不同(即使类上的值相等),则无法工作,因为ComboBox将无法在列表中找到Book中引用的Category。
你在上面绑定的真正问题(通过绑定到Category.ID)是你混合了方案。你有一个引用,但你试图绑定键。所有这些做的只是尝试在引用上设置值,而
不会尝试更改类上的引用。
Category
对象列表绑定到其他数据源?如果是的话,那就有意义了。 - Adam Robinson