簡體   English   中英

如何在Visibility屬性上執行簡單的XAML(WPF)條件綁定

[英]How to do a simple XAML (WPF) conditional binding on the Visibility property

我有一個帶有屬性的視圖模型:

public class MyModel
{
    public bool IsEnabled {get;set;}
}

我想使用此屬性來切換按鈕狀態。 如果布爾值為true,我想隱藏按鈕,否則顯示它。

我嘗試過這樣的事情:

<Button Visibility= "{Binding IsEnabled ? Hidden : Visible  }">Enable</Button>

但這不合適。

我嘗試了一些更復雜的解決方案,但我的猜測是,我錯過了一些微不足道的東西。

有什么建議?

由於您希望在HiddenVisible之間切換並且隱藏了true,您可以編寫自定義IValueConverter或使用簡單的Style.Trigger

<Button Content="Enable">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Setter Property="Visibility" Value="Visible"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding IsEnabled}" Value="True">
                    <Setter Property="Visibility" Value="Hidden"/>
                </DataTrigger>
            </Style.Triggers>                    
        </Style>
    </Button.Style>
</Button>

這是假設相應地設置DataContext並且每當更改時MyModel.IsEnabled引發INotifyPropertyChanged.PropertyChanged事件

public class MyModel : INotifyPropertyChanged
{
    private bool _isEnabled;

    public bool IsEnabled
    {
        get { return _isEnabled; }
        set
        {
            _isEnabled = value;
            OnPropertyChanged("IsEnabled");
        }
    }

    #region INotifyPropertyChanged

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        var handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }

    #endregion
}

使用BooleanToVisibilityConverter:

<Window.Resources>
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" />
</Window.Resources>

<Button Visibility= "{Binding IsEnabled, Converter={StaticResource BooleanToVisibilityConverter}}" />

添加繼承IValueConverter的類

public class BooleanToVisibilityConverter : IValueConverter
{

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        bool bValue = (bool)value;
        if (bValue)
            return Visibility.Visible;
        else
            return Visibility.Collapsed;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        Visibility visibility = (Visibility)value;

        if (visibility == Visibility.Visible)
            return true;
        else
            return false;
    }
    #endregion
}

暫無
暫無

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

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