簡體   English   中英

有沒有辦法將按鈕的 Enabled 屬性綁定到復選框的 Checked 屬性?

[英]Is there a way to bind the Enabled property of a button to a checkbox's Checked property?

我想綁定WPF中Button的IsEnabled如下:

WPF 代碼:

<Button Content="TestButton" IsEnabled="{Binding ??}" />

C# 代碼:

private MyObjectClass _Checked; 

public MyObjectClass Checked 
{ 
    get { return _Checked; } 
    set 
    { 
        _Checked = value; 
        RaisePropertyChanged("Checked"); 
    } 
}

在上面的 WPF 代碼中,我希望僅當 Checked object 不是 null 時才啟用按鈕。我知道一種方法是在 C# 代碼中有一個 bool 屬性,它告訴我 Checked object 是否是 null,然后綁定它IsEnabled 屬性。 我想知道是否有一種方法可以將 IsEnabled 直接綁定到 Checked object?

使用DataTrigger並檢查綁定的{x:Null}值:

<Button Content="TestButton">
    <Button.Style>
        <Style TargetType="Button">
            <Style.Triggers>
                <DataTrigger Binding="{Binding Checked}" Value="{x:Null}">
                    <Setter Property="IsEnabled" Value="False"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
</Button>

另外,您可以使用IValueConverter ,如果value為null,則返回false,否則返回true。

public class ObjectToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter,
                         CultureInfo culture)
    {
        bool returnValue = true;
        if (value == DependencyProperty.UnsetValue || value == null)
        {
            returnValue = false;
        }
        return returnValue;
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
                              CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

並綁定到XAML中:

<Button Content="TestButton"
        IsEnabled="{Binding Checked,
                    Converter={StaticResource ObjectToBoolConverter}}" />

當然,您需要為此在XAML中聲明轉換器的實例。

您可以使用轉換器將對象轉換為布爾值。 查看IValueConverter。

public class IsNotNullToBoolConverter: IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return value != null;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotSupportedException("Two-way binding not supported by IsNotNullToBoolConverter");
    }
}

您的xaml看起來像這樣:

<Window.Resources>
  <local:IsNotNullToBoolConverter x:Key="IsNotNull" />
</Window.Resources>

...

<Button IsEnabled="{Binding Converter={StaticResource IsNotNull}}" />

我知道這是一個老問題,但你可以在沒有額外代碼的情況下做到這一點。 只需將“TargetNullValue=false”添加到綁定中即可。

 IsEnabled="{Binding SomeProperty, TargetNullValue=false}"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM