WPF - Combobox SelectedItem 未设置?

Posted

技术标签:

【中文标题】WPF - Combobox SelectedItem 未设置?【英文标题】:WPF - Combobox SelectedItem not getting set? 【发布时间】:2011-03-31 04:33:12 【问题描述】:

我有一个 ComboBox,它的 ItemsSource 绑定到一个静态的List<CustomSettings> 选项。 ComboBox 是绑定到 CustomObject 类的表单的一部分,该类的属性之一是 CustomSettingProperty。

我想将 ComboBox 的 SelectedItem 绑定到 CustomObject 中指定的属性,但是 SelectedItem="Binding Path=CustomSettingProperty" 没有设置默认选中项。使用断点我可以看到它正在调用 get; 方法,所以我认为问题可能在于 CustomSettingProperty 是与 List<CustomObject> 分开创建的,因此 WPF 认为它不是同一个项目。

有没有简单的方法来做到这一点?或者也许是一个替代方案,因为 CustomSettings 类确实包含一个 Id?

【问题讨论】:

你能给出CustomSettingProperty的代码吗?并且可能是您如何设置它的示例? 【参考方案1】:

如果选择的项目与列表中包含的实例不同,则必须重写 CustomObject 中的 Equals() 以让 ComboBox 知道它是同一个对象。

如果是同一个实例,也许只是简单的事情,比如将BindingMode设置为TwoWay:

SelectedItem="Binding Path=CustomSettingProperty,Mode=TwoWay"

【讨论】:

谢谢!我不敢相信我没有考虑过覆盖 Equals...我不会再犯这个错误(我希望) 我有同样的问题,但我被覆盖了Equals()我如何设置BindingMode?注意:我使用的是 c# 和 Winforms Mode 默认是 TwoWay 不是吗? 来自 MSDN > 一种确定依赖属性默认绑定单向还是双向的编程方法是使用 GetMetadata 获取属性的属性元数据,然后检查 BindsTwoWayByDefault 的布尔值财产。 在我的情况下,只需简单地覆盖 Object.Equals 就会引发 ***Exception。我认为整个答案是实现完整的 IEquatable 这意味着实现其 Equals 方法并覆盖 Object.Equals(Object) 和 Object.GetHashCode 方法,如this example (请参阅“备注”部分的末尾 - “注意事项实施者” - 和“示例”部分)。

以上是关于WPF - Combobox SelectedItem 未设置?的主要内容,如果未能解决你的问题,请参考以下文章

wpf里combobox怎么取数据

wpf里combobox怎么取数据

wpf怎么把系统字库的字体大小读取到combobox

WPF:将 DataGrid 放入 ComboBox

wpf combobox 使用总出错

WPF 控件功能重写(ComboBox回车搜索)