WPF组合框没有';t显示所选内容
本文关键字:显示 组合 WPF | 更新日期: 2023-09-27 18:21:41
场景:
MyControl
类型的用户控制列表:
public List<MyControl> Controls { get; set; }
public MyControl SelectedControl { get; set; }
具有链接到Controls
属性的ItemsSource
的ComboBox
:
<ComboBox ItemsSource="{Binding Path=Controls}" SelectedItem="{Binding Path=SelectedControl}" DisplayMemberPath="HeaderTitle" >
问题是ComboBox
正确显示了项目,但当我选择一个项目时,它不会显示在ComboBox
中。为什么?
PS:HeaderTitle
是MyControl
类型的DependencyProperty
。
我认为这是WPF的重复-组合框SelectedItem没有设置?
因此,我想引用Heinz K的回答https://stackoverflow.com/a/3506262/6071619
我也遇到了同样的问题,通过重写CustomObject中的Equals()方法并比较Id属性来解决它。
如果所选的项与列表中包含的实例不同,则必须重写CustomObject中的Equals(),以使组合框知道它是同一个对象。
如果是同一个实例,也许这只是一件简单的事情,比如将BindingMode设置为TwoWay:
SelectedItem="{Binding Path=CustomSettingProperty,Mode=TwoWay}"
尝试这样绑定它。。
<ComboBox ItemsSource="{Binding Controls}" SelectedItem="{Binding SelectedControl, Mode=TwoWay}" DisplayMemberPath="{Binding HeaderTitle}" >
你真的不需要将所选属性绑定到它的类。。。它也可以只是一个字符串。因此,只需将所选项目存储在类型字符串中,然后从列表中获取与所选项目匹配的项目。
是否尝试为组合框设置DataContext?
<ComboBox DataContext="{Binding Controls}" ItemsSource="{Binding Controls}" DisplayMemberPath="HeaderTitle">
只要设置了ItemsSource和DisplayMemberPath,就不必绑定SelectedItem属性。