WPF ComboBox没有显示选择

时间:2014-09-11 12:47:08

标签: c# wpf combobox

情景:

MyControl类型的用户控件列表:

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

ComboBox ItemsSourceControls属性关联:

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

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

PS:HeaderTitleDependencyProperty类型的MyControl

3 个答案:

答案 0 :(得分:2)

我认为这是WPF - Combobox SelectedItem not getting set?

的副本

因此,我想引用Heinz K的回答https://stackoverflow.com/a/3506262/6071619

我遇到了同样的问题并通过覆盖CustomObject中的Equals()方法并比较了Id属性来解决它。

  

如果所选项目与List中包含的实例不同,则必须覆盖CustomObject中的Equals(),以使ComboBox知道它是同一个对象。

     

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

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

答案 1 :(得分:0)

尝试像这样绑定..

<ComboBox ItemsSource="{Binding Controls}" SelectedItem="{Binding SelectedControl, Mode=TwoWay}" DisplayMemberPath="{Binding HeaderTitle}" >

你真的不需要将选定的属性绑定到它的类......它也可以只是一个字符串。所以只需将所选项目存储在类型字符串中,然后处理从列表中获取与所选项目匹配的项目。

答案 2 :(得分:0)

尝试为ComboBox设置DataContext?

<ComboBox DataContext="{Binding Controls}" ItemsSource="{Binding Controls}" DisplayMemberPath="HeaderTitle">

只要设置了ItemsSource和DisplayMemberPath,就不必绑定SelectedItem属性。