Это распространенная проблема с переключателями в WPF, и она должна иметь необычный аспект привязки, который немного больше функциональности, чем ошибка.
Конструкция привязки предполагает, что только две вещи, которые изменяют значение целевого свойства привязки, являются: а) действиями в пользовательском интерфейсе и б) изменениями свойства источника. Если вы устанавливаете свойство target привязки в коде - как, вы явно устанавливаете Background
для Border
, даже если оно имеет привязку - привязка решает, что вы знаете, что вы делать, и что это должно просто убраться с дороги. Так что выключается.
Это довольно разумное дизайнерское решение, по большей части. Это лучше, чем бросить исключение, например. Большую часть времени вы все равно не собираетесь устанавливать IsEnabled
в коде; Вы позволите привязке сделать это. Особенно, если вы используете MVVM.
Хорошо, а что будет, если в группе есть радио-кнопки?
Когда вы отмечаете одну кнопку в группе, код WPF, который управляет группами радиокнопок, снимает все остальные кнопки в группе, устанавливая для IsChecked
значение false в коде. Привязка отключается сама. К сожалению.
Вот решение: если вы используете переключатели и привязку, не используйте группы. Обработайте логику взаимного исключения в коде модели представления. В вашем случае закодируйте модели представлений так, чтобы только один объект в коллекции мог иметь значение IsSelected
true в любой момент времени. (Да, это боль.)
Переключатели будут работать, как и ожидалось, но поскольку единственными свойствами, устанавливаемыми кодом, являются свойства источника, привязка не будет нарушена.