我有三个组合框,这样C的项目列表取决于B中的选定项目,B的项目列表取决于A中的选定项目。我有ObservableCollection
s每个组合框上的ItemsSource
的类,并且我希望将所选项的Name
属性推送到另一个类中的属性。例如:WPF级联组合框,从属组合框不更新
ObservableCollection<AClass> Items
=> ItemsSource of cbo_A ComboBox
而且selectedInstanceOfAClass.Name
应该推到Data.AClassName
财产。我遇到的问题是,当我第一次在A组合框中选择一个值时,B ComboBox会根据预期的A中所选项目获取适当的项目。当我第一次在B中选择一个项目时 - C获得正确的项目时也是如此。但是,当我在A中选择一个不同的值时,B中的项目会更新,但B的选定值保持不变,当我尝试从新项目中选择B中的新值时,选择不会更改 - - 它保持不变选择的值作为我在B.初步选定
这里的XAML我现在所拥有的:
<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}" />
什么导致与所选值不更新,甚至当我明确了怪异的行为单击组合框并尝试更改值?
编辑:调试和我有一个SelectionChanged
处理器上cbo_A
,另一个在cbo_B
的时候,我进入了cbo_B
处理程序cbo_A
人之前,所以从B的角度来看,选择的项目仍然是老项目,因为A有没有已更新。 :/
编辑2:如果我翻我的XAML组合框,通过this question建议,顺序,以使得C到来之前B来到A之前,我先输入的处理程序。当我然后输入cbo_B
的处理程序时,SelectedItem
属性显示旧值(先前选择,在我选择cbo_A
中的新值之前),即使我单击了ComboBox中显示的新项目列表中的值。
编辑3:我想一个版本的this answer并得到了同样的问题:我在改变组合框A的选定值看在ComboBox中乙新的价值,但在我,我不能改变B中选择的值已经设置了一次。我开始觉得我还有其他的东西会出错。