Я постараюсь объяснить это как можно более кратко. У меня есть 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. Таким образом, список и комбобокс находятся в основных деталях.
Если вы нажмете кнопку, она заполнит ObboableCollection <'B'> именем ComboItems, который, в свою очередь, заполнит поле со списком. Теперь здесь начинается странность. Когда я запускаю программу, если единственное, что я делаю, это нажимаю кнопку, а затем после слов выбираю элемент в списке, выпадающий список будет правильно выбирать элемент из-за привязки SelectedValue. Но если я запускаю программу и сначала выбираю элемент в списке, а затем нажимаю кнопку, текущий элемент списка не изменяется с текущим элементом списка. Обвязка кажется сломанной навсегда. Кто-нибудь знает, почему это происходит?
Ps. Если я установлю ItemsSource в выпадающем списке до того, как я установлю SelectedValue / SelectedValuePath, привязка master / detail никогда не будет работать. Я знаю, что есть порядок в xaml, но это кажется немного хрупким. Так что, если у кого-то есть вклад в это, я весь в ушах.
Спасибо, Нейт
РЕДАКТИРОВАТЬ -
При связывании SelectedValue оно очень хрупкое. Если привязка работает, то есть ничего не выбрано в списке, а затем заполнена в выпадающем списке, если вы выберете элемент в выпадающем списке, привязка прекратится. После того, как много времени было потрачено на это, я решил связать SelectedItem. Эта привязка не нарушается ни в одном из указанных выше условий. Однако я бы взял любые ответы на вопрос, почему привязка SelectedValue является настолько нелепой. Еще раз спасибо всем, кто ответил или ответит.