【问题标题】:WPF MVVM dependency Property Get negative valueWPF MVVM依赖属性获取负值
【发布时间】:2016-02-08 19:46:53
【问题描述】:

我有两个按钮,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)));

【问题讨论】:

  • 不知道你为什么要介绍DependencyProperty。它可以是bool IsSended 属性,您可以使用value converter 绑定到否定属性。

标签: c# wpf mvvm


【解决方案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}}">

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    相关资源
    最近更新 更多