情景:
MyControl
类型的用户控件列表:
public List<MyControl> Controls { get; set; }
public MyControl SelectedControl { get; set; }
ComboBox
ItemsSource
与Controls
属性关联:
<ComboBox ItemsSource="{Binding Path=Controls}" SelectedItem="{Binding Path=SelectedControl}" DisplayMemberPath="HeaderTitle" >
问题在于ComboBox
正确显示了项目,但当我选择一个项目时,它不会显示在ComboBox
中。为什么呢?
PS:HeaderTitle
是DependencyProperty
类型的MyControl
。
答案 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属性。