如何在WPF中绑定反布尔属性?
我拥有的是具有IsReadOnly
属性的对象。 如果此属性为true,我想将按钮(例如)上的IsEnabled
属性设置为false。
我想相信我可以像IsEnabled="{Binding Path=!IsReadOnly}"
一样轻松完成,但不会与WPF一起飞。
我是否必须经历所有风格设置? 就像设置一个布尔到另一个布尔的反转一样简单,似乎太罗嗦了。
<Button.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=IsReadOnly}" Value="True">
<Setter Property="IsEnabled" Value="False" />
</DataTrigger>
<DataTrigger Binding="{Binding Path=IsReadOnly}" Value="False">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
您可以使用ValueConverter为您反转bool属性。
XAML:
IsEnabled="{Binding Path=IsReadOnly, Converter={StaticResource InverseBooleanConverter}}"
转换器:
[ValueConversion(typeof(bool), typeof(bool))]
public class InverseBooleanConverter: IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (targetType != typeof(bool))
throw new InvalidOperationException("The target must be a boolean");
return !(bool)value;
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
你有没有考虑过IsNotReadOnly属性? 如果绑定的对象是MVVM域中的ViewModel,那么附加属性就非常合理。 如果它是一个直接的实体模型,您可以考虑组合并向表单呈现实体的专门视图模型。
使用标准绑定,您需要使用看起来有点风的转换器。 所以,我建议你看看我的项目CalcBinding,它是专门为解决这个问题而开发的。 使用高级绑定,您可以直接在xaml中编写具有多个源属性的表达式。 说,你可以写一些类似的东西:
<Button IsEnabled="{c:Binding Path=!IsReadOnly}" />
要么
<Button Content="{c:Binding ElementName=grid, Path=ActualWidth+Height}"/>
要么
<Label Content="{c:Binding A+B+C }" />
要么
<Button Visibility="{c:Binding IsChecked, FalseToVisibility=Hidden}" />
其中A,B,C,IsChecked - viewModel的属性,它会正常工作
祝你好运!
链接地址: http://www.djcxy.com/p/44649.html