WPF - 级联组合框,依赖组合框不更新

时间:2010-12-01 17:14:46

标签: c# wpf data-binding xaml combobox

我有三个组合框,这样C的项目列表依赖于B中的选定项目,B项目列表依赖于A中的选定项目。ObservableCollection具有ItemsSourceName个特定类在每个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中的选定值。我开始认为我还有别的事情会出错。

1 个答案:

答案 0 :(得分:1)

哇。所以,不要为新类快速实现一堆IEquatable<T> Equals方法,因为你最终可能会做我做的事情:

if (ReferenceEquals(this, other))
{
    return false;  // Say what??
}

叹息。我让我的ComboBox工作:

  • 更正我的BClass.Equals(BClass other)方法;
  • 使用this answer关于使用具有不同属性的其他视图模型类,例如SelectedAItemAItems;和
  • 使用this answer将我的XAML声明用于不同的顺序,以便cbo_C出现在cbo_B之前cbo_B出现在cbo_A之前。

我可以尝试简化一些事情,看看我的ComboBox上绝对需要哪些部分。