Почему ComboBox сбрасывает выбранный элемент SelectedItem при двунаправленной привязке?
Published in Полезные советы
Почему ComboBox может сбрасывать выбранный элемент SelectedItem при двунаправленной привязке, хотя вроде бы всё сделано верно? Например, есть такая XAML разметка:
<ComboBox SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" ItemsSource="{Binding MyList, Mode=OneWay}" />
Так привязка работать не будет. А вот так будет:
<ComboBox ItemsSource="{Binding MyList, Mode=OneWay}" SelectedItem="{Binding MySelectedItem, Mode=TwoWay}" />
Несмотря на практически идентичную разметку, первый кусок кода работает не так, как ожидается.
Нюанс в том, что парсер XAML-разметки разбирает код последовательно. Если сначала объявлена привязка выделенного элемента SelectedItem, а после – источник данных для ComboBox, то при загрузке окна и построении графического интерфейса GUI всегда будет выбран первый элемент (ComboBox.SelectedIndex=0).
Поэтому следует всегда объявлять сначала источник элементов списка ComboBox.ItemsSource, а потом привязку выделенного элемента ComboBox.SelectedItem. Это касается и других элементов графического интерфейса, источниками которых являются коллекции, списки или массивы.