WPF组合框没有';t显示所选内容

本文关键字:显示 组合 WPF | 更新日期: 2023-09-27 18:21:41

场景:

MyControl类型的用户控制列表:

public List<MyControl> Controls { get; set; }
public MyControl SelectedControl { get; set; }

具有链接到Controls属性的ItemsSourceComboBox

<ComboBox ItemsSource="{Binding Path=Controls}" SelectedItem="{Binding Path=SelectedControl}" DisplayMemberPath="HeaderTitle" >

问题是ComboBox正确显示了项目,但当我选择一个项目时,它不会显示在ComboBox中。为什么?

PS:HeaderTitleMyControl类型的DependencyProperty

WPF组合框没有';t显示所选内容

我认为这是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属性。