我有三个组合框,这样C的项目列表依赖于B中的选定项目,B项目列表依赖于A中的选定项目。ObservableCollection
具有ItemsSource
个Name
个特定类在每个ComboBox上,我希望将所选项的ObservableCollection<AClass> Items
=> ItemsSource of cbo_A ComboBox
属性推送到另一个类中的属性。例如:
selectedInstanceOfAClass.Name
Data.AClassName
应该推送到<ComboBox x:Name="cbo_A"
ItemsSource="{Binding Path=Lists.AItems, Mode=OneWay}"
DisplayMemberPath="Name" SelectedValuePath="Name"
SelectedValue="{Binding Path=Data.AClassName, ValidatesOnDataErrors=True,
Mode=OneWayToSource}" />
<ComboBox x:Name="cbo_B"
ItemsSource="{Binding ElementName=cbo_A, Path=SelectedItem.BItems, Mode=OneWay}"
SelectedValuePath="Name" DisplayMemberPath="Name"
SelectedValue="{Binding Path=Data.BClassName, ValidatesOnDataErrors=True,
Mode=OneWayToSource}"/>
<ComboBox x:Name="cbo_C"
ItemsSource="{Binding ElementName=cbo_B, Path=SelectedItem.CItems, Mode=OneWay}"
SelectedValuePath="Name" DisplayMemberPath="Name"
SelectedValue="{Binding Path=Data.CClassName, Mode=OneWayToSource,
ValidatesOnDataErrors=True}" />
属性。我遇到的问题是,当我第一次在A ComboBox中选择一个值时,B ComboBox会根据预期在A中的所选项目获取相应的项目。当我第一次在B中选择一个项目时 - C得到正确的项目。但是,当我在A中选择不同的值时,B中的项目会更新但B的选定值保持不变,当我尝试从其新项目中选择B中的新值时,选择不会更改 - - 保持与我最初在B中选择的值相同的选择值。
这是我现在拥有的XAML:
SelectionChanged
即使我明确点击ComboBox并尝试更改值,导致所选值未更新的奇怪行为是什么?
调试时 编辑,我在cbo_A
上有一个cbo_B
处理程序而在cbo_B
上有一个cbo_A
处理程序,我之前进入cbo_B
处理程序SelectedItem
一个,因此B视角中的所选项目仍然是旧项目,因为A尚未更新。 :/
编辑2:如果我按照this question的建议在XAML中翻转我的ComboBox的顺序,这样C在B出现在A之前,我首先输入A的处理程序。然后当我输入cbo_A
的处理程序时,{{1}}属性显示旧值(之前已选中,之前我在{{1}}中选择了一个新值),即使我单击了一个值ComboBox中显示的新项目列表。
编辑3:我正在尝试this answer的版本并遇到同样的问题:我在更改ComboBox A的选定值时看到ComboBox B中的新值,但我不能在我已经设置一次之后更改B中的选定值。我开始认为我还有别的事情会出错。
答案 0 :(得分:1)
哇。所以,不要为新类快速实现一堆IEquatable<T>
Equals
方法,因为你最终可能会做我做的事情:
if (ReferenceEquals(this, other))
{
return false; // Say what??
}
叹息。我让我的ComboBox工作:
BClass.Equals(BClass other)
方法; SelectedAItem
和AItems
;和cbo_C
出现在cbo_B
之前cbo_B
出现在cbo_A
之前。我可以尝试简化一些事情,看看我的ComboBox上绝对需要哪些部分。