Мне интересно, есть ли у кого-то простое и лаконичное решение для привязки к свойству зависимости, которое должно быть обратным свойству. Вот пример
У меня есть текстовое поле, которое отключено на основе свойства в текстовом данных, например ::100100
<TextBox IsEnabled={Binding CanEdit} Text={Binding MyText}/>
Требование меняется, и я хочу сделать его ReadOnly вместо отключенного, поэтому, не меняя мою модель представления, я мог бы сделать это:
В ресурсах UserControl:
<UserControl.Resources>
<m:NotConverter x:Key="NotConverter"/>
</UserControl.Resources>
А затем измените TextBox на:
<TextBox IsReadOnly={Binding CanEdit,Converter={StaticResource NotConverter}} Text={Binding MyText}/>
То, что я лично считаю, ЧРЕЗВЫЧАЙНО многословно
Я бы хотел просто сделать это ( обратите внимание! ):
<TextBox IsReadOnly={Binding !CanEdit} Text={Binding MyText}/>
Но, увы, это не вариант, который я знаю.
Я могу придумать два варианта.
- Создайте вложенное свойство
IsNotReadOnly
в FrameworkElement
(?) И привяжите к этому свойству
- Если я изменю свою ViewModel, тогда я мог бы добавить свойство
CanEdit
и другое CannotEdit
, которое меня отчасти смутило бы, потому что я считаю, что оно добавляет не относящееся к делу свойство в класс, который я не считаю хорошая практика.
Основная причина этого вопроса заключается в том, что в моем проекте вышеприведенное относится не только к одному элементу управления, поэтому, стараясь сделать свой проект максимально СУХИМЫМ и читабельным, я выкидываю это любому, кто чувствует мою боль и подходит с решением:)