Я постараюсь объяснить это как можно лаконичнее. У меня есть 2 объекта, первый из которых мы назовем объектом A, имеющим свойство Id, а второй - объектом B, у которого есть свойство ParentId. Очевидная взаимосвязь состоит в том, что ParentId объекта B устанавливается равным свойству Id объекта A. Я использую шаблон MVVM, поэтому в модели просмотра у меня есть 2 ObservableCollections, одна из которых содержит объекты A, а другая - B. При построении модели просмотра я создаю и заполняю ObservableCollection ‹'A'> с именем ListItems. Мой xaml прост,
<StackPanel>
<ListBox IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding ListItems}">
</ListBox>
<ComboBox SelectedValuePath="ParentId" SelectedValue="{Binding Path=ListItems/Id, Mode=OneWay}" ItemsSource="{Binding ComboItems}">
</ComboBox>
<Button Click="Button_Click" Content="Push Me"/>
</StackPanel>
Как видите, SelectedValue поля со списком привязано к свойству Id текущего элемента ListItems. Таким образом, по сути, список и поле со списком находятся в основных деталях.
Если вы нажмете кнопку, она заполнит поле ObservableCollection ‹'B'> name ComboItems, которое, в свою очередь, заполнит поле со списком. Вот где начинается странность. Когда я запускаю программу, если единственное, что я делаю, это нажимаю кнопку, а затем после слов выбираю элемент в списке, поле со списком правильно выберет элемент из-за привязки SelectedValue. Но если я запускаю программу и сначала выбираю элемент в списке, а затем нажимаю кнопку, текущий элемент поля со списком не изменится с текущим элементом списка. Связь кажется разорванной навсегда. кто-нибудь знает, почему это произошло?
Пс. Если я установил ItemsSource в поле со списком до того, как установил SelectedValue / SelectedValuePath, привязка master / detail никогда не будет работать. Я знаю, что в xaml есть порядок, но это кажется немного хрупким. Так что, если у кого-то есть мнение по этому поводу, я все слышу.
Спасибо, Нейт
ИЗМЕНИТЬ -
При привязке SelectedValue он очень хрупкий. Если привязка работает, т.е. ничего не выбрали в списке, а затем заполнили поле со списком, если вы выберете элемент в поле со списком, привязка разорвется. Потратив много времени на это, я решил привязать SelectedItem. Эта привязка не нарушает ни одно из указанных мною ранее условий. Однако я хотел бы ответить на любые вопросы, почему привязка SelectedValue такая нелепая. Еще раз спасибо всем, что ответили или ответят.