我有两个按钮,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)));
答案 0 :(得分:1)
WPF中有很多要做的事情; IValueConverters
,DataTemplate
或覆盖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}}">