繁体   English   中英

如何将属性绑定到错误值

[英]How to bind a property to false value

我想将ComboBox的IsEnabled属性绑定到复选框的IsChecked属性,而我希望仅在复选框值为FALSE时才启用ComboBox。

IsEnabled="{Binding ElementName=RegexCbx, Path=IsChecked}"

最简单的方法是什么?

使用样式触发器:

<StackPanel>
    <CheckBox x:Name="Foo" Content="Click me"/>
    <ComboBox>
        <ComboBox.Style>
            <Style TargetType="{x:Type ComboBox}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding IsChecked, ElementName=Foo}" Value="True">
                        <Setter Property="IsEnabled" Value="False"/>
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </ComboBox.Style>
    </ComboBox>
</StackPanel>

从IValueConverter派生的类应做到这一点:

public class BoolToOppositeBoolConverter : 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

}

最好在资源字典中,创建转换器的实例:

<converters:BoolToOppositeBoolConverter x:Key="oppositeBoolConverter" />

然后在您的视图中执行类似的操作,将IsChecked的布尔值转换为相反的值。 不要忘记将资源字典作为视图资源。

<TextBox IsEnabled="{Binding IsChecked, Converter={StaticResource oppositeBoolConverter}" />

另一种方法是使用BlendDataTrigger

    xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
    xmlns:ie="http://schemas.microsoft.com/expression/2010/interactions"

    <ComboBox>
        <i:Interaction.Triggers>
            <ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}"
                            Value="False">
                <ie:ChangePropertyAction PropertyName="IsEnabled"
                                         TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}"
                                         Value="True"/>
            </ie:DataTrigger>
            <ie:DataTrigger Binding="{Binding IsChecked, ElementName=RegexCbx}"
                            Value="True">
                <ie:ChangePropertyAction PropertyName="IsEnabled"
                                         TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ComboBox}}"
                                         Value="False"/>
            </ie:DataTrigger>
        </i:Interaction.Triggers>
    </ComboBox>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM