有什么方法可以在 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/