WPF 属性数据绑定(bind)以否定属性

标签 wpf data-binding

有什么方法可以在 WPF 数据绑定(bind)中在运行时更改属性的值。假设我的 TextBox 绑定(bind)到 IsAdmin 属性。无论如何我可以将 XAML 中的属性值更改为 !IsAdmin。

我只是想否定这个属性,所以 Valueconverter 可能是一个矫枉过正!

注意:不使用 ValueConverter

最佳答案

您可以使用 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;
    }
}

然后你会设置你的绑定(bind),如:
<TextBlock Text="{Binding Path=IsAdmin, Converter={StaticResource boolConvert}}" />

添加资源(通常在您的用户控件/窗口中),如下所示:
<local:InvertBooleanConverter  x:Key="boolConvert"/>

编辑以回应评论:

如果你出于某种原因想避免使用值转换器(虽然我觉得这是最合适的地方),你可以直接在你的 ViewModel 中进行转换。只需添加如下属性:
public bool IsRegularUser
{
     get { return !this.IsAdmin; }
}

但是,如果您这样做,请确保您的 IsAdmin属性 setter 也会引发 PropertyChanged “IsRegularUser”和“IsAdmin”的事件,因此 UI 会相应更新。

关于WPF 属性数据绑定(bind)以否定属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2580467/

相关文章:

c# - MVVM - 具有多态性的集合

WPF默认光标中的拖动光标

javascript - 具有基于 View 的数据绑定(bind)上下文的模块化 Web 组件

java - Jackson 的 JSON : Unrecognized field, 未标记为可忽略

c# - 异步加载数据时的反馈

Angular:如何将异步属性数据绑定(bind)到背景图像

c# - ListView SelectedItem 的属性和 TextBox 绑定(bind)发生 ArgumentException

c# - PRISM WPF CompositeCommand Execute 方法不起作用

c# - 如何在不在 WPF 中创建新的 RotateTransform 的情况下在另一个线程中旋转矩形?

wpf - 如何使用样式/模板格式化 wpf 中的小数位数?