WPF - Combobox SelectedItem не устанавливается?

У меня есть ComboBox, у которого ItemsSource привязан к статическому List<CustomSettings> параметров. ComboBox является частью формы, которая привязана к классу CustomObject, и одним из свойств этого класса является CustomSettingProperty.

Я хотел бы привязать SelectedItem ComboBox к свойству, указанному в CustomObject, однако SelectedItem="{Binding Path=CustomSettingProperty}" не устанавливает выбранный элемент по умолчанию. Используя точки останова, я вижу, что он вызывает метод get;, поэтому я думаю, что проблема может заключаться в том, что CustomSettingProperty создается отдельно от List<CustomObject>, поэтому WPF не считает, что это один и тот же элемент.

Есть простой способ сделать это? Или, возможно, альтернатива, поскольку класс CustomSettings действительно содержит идентификатор?


person Rachel    schedule 17.08.2010    source источник
comment
Можете дать код для CustomSettingProperty? И, возможно, пример того, как вы его настраиваете?   -  person jsmith    schedule 17.08.2010


Ответы (1)


Если выбранный элемент не является тем же экземпляром, который содержится в списке, необходимо переопределить Equals () в CustomObject, чтобы ComboBox знал, что это тот же объект.

Если это тот же экземпляр, возможно, это всего лишь простая вещь, например установка BindingMode на TwoWay:

SelectedItem="{Binding Path=CustomSettingProperty,Mode=TwoWay}"
person Heinz K    schedule 17.08.2010
comment
Спасибо! Я не могу поверить, что не думал об отмене Equals ... Я больше не буду повторять эту ошибку (надеюсь) - person Rachel; 17.08.2010
comment
У меня та же проблема, но меня заменили Equals() Как мне установить BindingMode? Примечание: я использую c # и Winforms - person Cristhian Boujon; 14.03.2013
comment
По умолчанию режим TwoWay не так ли? - person Brock Hensley; 16.08.2013
comment
Из MSDN ›Программный способ определить, связывает ли свойство зависимости односторонним или двусторонним по умолчанию, является получение метаданных свойства с помощью GetMetadata, а затем проверка логического значения свойства BindsTwoWayByDefault. - person Maxence; 27.02.2014
comment
Спасибо @Heinz K, но как переопределить Equals ()? Не могли бы вы привести небольшой пример. - person LightTechnician; 26.06.2015
comment
В моем случае просто переопределите Object.Equals, чтобы выбросить StackOverflowException. Я думаю, что весь ответ заключается в реализации полного IEquatable ‹T›, что означает реализацию его метода Equals и переопределение методов Object.Equals (Object) и Object.GetHashCode, как в этот пример (см. конец раздела" Примечания "-" Примечания для разработчиков "и" Примеры "). - person Alex34758; 26.07.2016