WPF MVVM依赖项属性获取负值

时间:2016-02-08 19:46:54

标签: c# wpf mvvm

我有两个按钮,SEND和UNSEND。我想使用布尔值IsSended启用或禁用按钮。

我创建了一个依赖项属性,可用于启用其中一个按钮,但我如何使用负值来控制另一个按钮?

查看

dxb:BarButtonItem Content="SEND" IsEnabled="{Binding !IsSent}" 
dxb:BarButtonItem Content="UNSEND" IsEnabled="{Binding IsSent}" 

视图模型

public Boolean IsSent
{
   get { return (Boolean) GetValue(IsSendedProperty); }
   set { SetValue(IsSendedProperty, value); }
}

public static readonly DependencyProperty IsSendedProperty = DependencyProperty.Register("IsSent", typeof(Boolean), typeof(ViewModel), new PropertyMetadata(default(Boolean)));

1 个答案:

答案 0 :(得分:1)

WPF中有很多要做的事情; IValueConvertersDataTemplate或覆盖ControlTemplate

很难知道从长远来看哪个是最适合您的特定应用程序,但最简单的显示是IValueConverter

添加一个名为NegateBoolConverter

的类
public class NegateBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(bool)value;
    }


    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return !(bool)value;
    }
}

在XAML中创建此类的实例(我将所有转换器全部放在App.xaml中,但您可以将其放在<Window.Resources>部分。

  <Window.Resources>
    <local:NegateBoolConverter x:Key="MyConverter"/>
  </Window.Resources>

其中local:是转换器类的名称空间

然后您的绑定变为:

  <dxb:BarButtonItem Content="SEND" IsEnabled="{Binding IsSended, Converter={StaticResource MyConverter}}">