Как связать обратные логические свойства в WPF? - PullRequest
337 голосов
/ 24 июня 2009

У меня есть объект, обладающий свойством IsReadOnly. Если это свойство имеет значение true, я хотел бы установить для свойства IsEnabled для кнопки (например) значение false.

Мне бы хотелось верить, что я могу сделать это так же легко, как IsEnabled="{Binding Path=!IsReadOnly}", но это не работает с WPF.

Должен ли я пройти через все настройки стиля? Просто кажется слишком многословным для чего-то столь же простого, как установка одного bool в обратное значение другого bool.

<Button.Style>
    <Style TargetType="{x:Type Button}">
        <Style.Triggers>
            <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="True">
                <Setter Property="IsEnabled" Value="False" />
            </DataTrigger>
            <DataTrigger Binding="{Binding Path=IsReadOnly}" Value="False">
                <Setter Property="IsEnabled" Value="True" />
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Button.Style>

Ответы [ 11 ]

1 голос
/ 08 сентября 2017

Добавьте еще одно свойство в вашу модель представления, которая будет возвращать обратное значение. И свяжи это с кнопкой. Как;

в представлении модель:

public bool IsNotReadOnly{get{return !IsReadOnly;}}

в xaml:

IsEnabled="{Binding IsNotReadOnly"}
...