У меня есть три ComboBox, так что список элементов C зависит от выбранного элемента в B, а список элементов B зависит от выбранного элемента в A. У меня есть ObservableCollection
определенных классов для ItemsSource
на каждом ComboBox и я хочу, чтобы свойство Name
выбранного элемента было передано в свойство в другом классе. Например:
ObservableCollection<AClass> Items
=> ItemsSource of cbo_A ComboBox
И selectedInstanceOfAClass.Name
должны быть переданы в свойство Data.AClassName
. У меня проблема в том, что когда я выбираю значение в ComboBox 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}" />
Что вызывает странное поведение с выбранным значением, которое не обновляется, даже когда я явно щелкаю ComboBox и пытаюсь изменить значение?
Редактировать: при отладке, когда у меня был обработчик SelectionChanged
на cbo_A
, а другой на cbo_B
, я ввел обработчик cbo_B
перед cbo_A
, поэтому выбранный элемент с точки зрения B все еще был старый элемент, потому что A еще не обновлялся. : /
Редактировать 2: если я переверну порядок своих ComboBox в XAML, предложенный этим вопросом , так что C предшествует B раньше, чем A, я сначала вводю обработчик A. Когда я затем ввожу обработчик для cbo_B
, свойство SelectedItem
показывает старое значение (ранее выбранное, прежде чем я выбрал новое значение в cbo_A
), даже если я щелкнул значение из нового списка элементов, отображаемых вверх в поле со списком.
Редактировать 3: Я пробую версию этот ответ и получаю ту же проблему: я вижу новые значения в ComboBox B при изменении выбранного значения ComboBox A, но Я не могу изменить выбранное значение в B после того, как я уже установил его один раз. Я начинаю думать, что у меня что-то не так.