Вы можете использовать IValueConverter
.
[ValueConversion(typeof(bool), typeof(bool))]
public class InvertBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool original = (bool)value;
return !original;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
bool original = (bool)value;
return !original;
}
}
Тогда вам настроить ваши привязки, как:
<TextBlock Text="{Binding Path=IsAdmin, Converter={StaticResource boolConvert}}" />
Добавить ресурс (как правило, в вашем UserControl/Window) следующим образом:
<local:InvertBooleanConverter x:Key="boolConvert"/>
Редактировать в ответ для комментариев:
Если вы хотите избежать va lue конвертер по какой-то причине (хотя я считаю, что это наиболее подходящее место), вы можете сделать преобразование непосредственно в ViewModel. Просто добавьте свойство, как:
public bool IsRegularUser
{
get { return !this.IsAdmin; }
}
Если вы сделаете это, тем не менее, убедитесь, что ваш IsAdmin
свойство сеттер также поднимает PropertyChanged
событие для «IsRegularUser», а также «IsAdmin», так что интерфейс пользователя обновляет соответствующим образом.
На самом деле я должен был упомянуть, не используя ValueConverter – azamsharp
Не думаете ли вы, что waaaaay много работает для простой операции отрицания! – azamsharp
@azamsharp: Я отредактировал, чтобы дать вам еще один вариант - но нет, не знаю, в основном потому, что это ** многоразовый код **. После создания конвертера вы можете использовать его для ВСЕХ ваших конверсий! Bool, где бы вы ни находились в своей кодовой базе. –