C#:Caliburn Micro:如何使用数据绑定控制 WPF 按钮的属性?

Posted

技术标签:

【中文标题】C#:Caliburn Micro:如何使用数据绑定控制 WPF 按钮的属性?【英文标题】:C#: Caliburn Micro: How do I control the properties of a WPF Button using data binding? 【发布时间】:2020-12-24 16:35:14 【问题描述】:

当用户按下按钮时,我希望该按钮消失并由确认按钮代替。下面的代码是我认为会使按钮消失的代码,但是当我单击按钮时,什么也没有发生。 DeleteButton() 方法使用 Caliburn Micro 约定正确连接到 XAML。如何从 ViewModel 控制按钮的可见性或任何其他属性?谢谢。

XAML:

<Button x:Name="DeleteButton" Visibility="Binding DeleteButtonVisibility"/>

视图模型:

    bool _deleteButtonVisibility = true;

    public bool DeleteButtonVisibility
    
        get  return _deleteButtonVisibility; 
        set
        
            _deleteButtonVisibility = value;
            NotifyOfPropertyChange(() => DeleteButtonVisibility);
        
    

    public void DeleteButton()
    
        DeleteButtonVisibility = false;
    

【问题讨论】:

您的绑定似乎很好,除了 Visibility 的特殊情况始终需要从 bool 到 Visibility 枚举的转换器,但对于其他属性,这很好。 【参考方案1】:

可见性不是布尔值,它是System.Windows.Visibility

https://docs.microsoft.com/en-us/dotnet/api/system.windows.uielement.visibility?view=netcore-3.1

试试这个:

    Visibility _deleteButtonVisibility = Visibility.Visible;

    public Visibility DeleteButtonVisibility
    
        get  return _deleteButtonVisibility; 
        set
        
            _deleteButtonVisibility = value;
            NotifyOfPropertyChange(() => DeleteButtonVisibility);
        
    

    public void DeleteButton()
    
        DeleteButtonVisibility = Visibility.Collapsed;
    

【讨论】:

太好了,谢谢!我打算使用 Visibility.Hidden。是否有充分的理由使用 Visibility.Collapsed?有什么区别? 您可以在这里查看:docs.microsoft.com/en-us/dotnet/api/…。本质上折叠意味着可以在隐藏按钮上绘制其他组件,而不是在视图中保留空间。隐藏只会显示隐藏按钮所在的空白区域。正如您打算更换按钮一样,Collapsed 似乎更合适。

以上是关于C#:Caliburn Micro:如何使用数据绑定控制 WPF 按钮的属性?的主要内容,如果未能解决你的问题,请参考以下文章

C# WPF MVVM开发框架Caliburn.Micro 名称Transformer⑩①

使用 caliburn.micro wpf c# 更改视图名称

C# WPF MVVM开发框架Caliburn.Micro自定义引导程序④

C# WPF MVVM开发框架Caliburn.Micro快速搭建③

在 C# Caliburn Micro WPF 中异步和等待获取 HttpRequest 时更新 ProgressBar

C# WPF MVVM开发框架Caliburn.Micro常用功能指南②