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