簡體   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