【问题标题】:WPF - Combobox SelectedItem not getting set?WPF - Combobox SelectedItem 未设置?
【发布时间】:2023-03-09 08:21:02
【问题描述】:

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

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

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

【问题讨论】:

  • 你能给出CustomSettingProperty的代码吗?并且可能是您如何设置它的示例?

标签: wpf binding combobox selecteditem itemssource


【解决方案1】:

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

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

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

【讨论】:

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