IsEnabled的WPF元素数据绑定(但为false)
我是WPF的新手,有些事情我似乎想不通 我有一个IsEnabled的WPF元素数据绑定(但为false),wpf,data-binding,checkbox,isenabled,Wpf,Data Binding,Checkbox,Isenabled,我是WPF的新手,有些事情我似乎想不通 我有一个复选框,当未选择单选按钮时,我想禁用该复选框。 我当前的语法是: <CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox> 全部显示 所以基本上,我希望IsEnabled接受与我当前提供的绑定表达式相反的值 我该怎么做?谢谢。您需要使用所谓的值转换器(一个实现IValueConverter的类)。下面显示了
复选框
,当未选择单选按钮时,我想禁用该复选框。
我当前的语法是:
<CheckBox IsEnabled="{Binding ElementName=rbBoth, Path=IsChecked}">Show all</CheckBox>
全部显示
所以基本上,我希望IsEnabled接受与我当前提供的绑定表达式相反的值
我该怎么做?谢谢。您需要使用所谓的值转换器(一个实现IValueConverter的类)。下面显示了此类的一个非常基本的示例。(注意剪辑…)
然后,要将其包含在XAML中,您可以执行以下操作:
<UserControl xmlns:local="clr-namespace:MyNamespace">
<UserControl.Resources>
<local:NegateConverter x:Key="negate" />
</UserControl.Resources>
...
<CheckBox IsEnabled="{Binding IsChecked, ElementName=rbBoth, Converter={StaticResource negate}}"
Content="Show all" />
</UserControl>
...
您当前的语法已经满足您的需要。如果未选中radiobutton,则会禁用该复选框
如果你真的想改变这种情况,你所需要的只是一个转换器。看看这个。这个怎么样:
为布尔值创建一个转换器:
class BooleanValueInverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (!(parameter is IValueConverter))
{
if (value is bool)
return !(bool)value;
else
return DependencyProperty.UnsetValue;
}
else
{
IValueConverter converter = (IValueConverter)parameter;
if (value is bool)
{
bool input = !(bool)value;
return converter.Convert(input, targetType, null, culture);
}
else
{
return DependencyProperty.UnsetValue;
}
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在xaml中,导入实现inverter类的命名空间:
xmlns:util="clr-namespace:MyApp.Utilities"
在参考资料部分中,添加参考逆变器类别:
<util:BooleanValueInverter x:Key="Inverter" />
然后就这样简单地使用它:
<TextBox Text="{Binding Path=TextProperty}" IsEnabled="{Binding SomeBoolPropertyToInvert, Converter={StaticResource Inverter}}"/>
是的。。。我想了想,但我想看看是否有更直接的方法。当你越来越多地使用WPF时,你会发现你创建了一组非常复杂的转换器,它们的设计通常是非常可重用的。事实上,我确实有一个NegateConverter,但它比我的示例更健壮。它否定数字、布尔值、可见性、厚度等。这只是我经常使用的十几个转换器中的一个。乔希:如何否定厚度?var thickness2=新厚度(-t1.Left,-t1.Top,-t1.Right,-t1.Bottom);事实上,我只是在这里写了一篇博客。。。
<TextBox Text="{Binding Path=TextProperty}" IsEnabled="{Binding SomeBoolPropertyToInvert, Converter={StaticResource Inverter}}"/>
<CheckBox>
<CheckBox.Style>
<Style TargetType="CheckBox">
<Setter Property="Visibility" Value="Visible" />
<Style.Triggers>
<DataTrigger Binding="{Binding IsShowName }" Value="true">
<Setter Property="Visibility" Value="Collapsed" />
</DataTrigger>
</Style.Triggers>
</Style>
</CheckBox.Style>
</CheckBox>