c# - 如何对 Visibility 属性进行简单的 XAML (WPF) 条件绑定(bind)

标签 c# wpf xaml

我有一个带有属性的 View 模型:

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

我想使用这个属性来切换按钮状态。如果 bool 值为真,我想隐藏按钮,否则显示它。

我试过这样的事情:

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

但这不合适。

我尝试了一些更复杂的解决方案,但我猜我遗漏了一些微不足道的东西。

有什么建议吗?

最佳答案

因为你想在 HiddenVisible 之间切换并且 true 是隐藏的,你可以编写自定义 IValueConverter 或使用简单的 Style .触发器

<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
}

关于c# - 如何对 Visibility 属性进行简单的 XAML (WPF) 条件绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172392/

相关文章:

xaml - PowerShell 更改 ScriptBlock 中的变量

android - 未显示按钮边框颜色 xamarin 表单

c# - SelectSingleNode 总是返回 null?

c# - “标签不包含文本定义”

c# - MVVM + Reactive + WCF 回调

wpf - 如何使 View 模型与模型进行通信?

c# - 创建自定义控件的正确方法是什么

c# - 线程中的 System.OutOfMemoryException

c# - 将值从字符串转换为 Guid 或 int 的泛型类型

WPF - Groupbox 标题对齐