如何使用MVVM模式“禁用”WPF中的按钮?

我正在努力掌握WPF和MVVM,并且取得了很好的进展。 WPF和MVVM方面的进展顺利。

但是,XAML和数据绑定方面是另一个故事:)

我如何“禁用”按钮?

例如,我的视图模型中有一个CanClose属性,用于确定当前是否可以关闭应用程序。 如果一个工作线程没有做某事,那么这个属性设置为false,我想要灰显按钮,或者通过某种绑定以某种方式在视觉上禁用关闭按钮。

我该怎么做呢?

谢谢!

编辑 –

太糟糕了我只能接受一个答案。

这两个答案对我帮助很大。 在Kent的post中,他更进一步解释了为什么要在应用程序中实现命令基础结构,而不是按照我提出的方式禁用按钮:

如何使用MVVM模式“禁用”WPF中的按钮?

以及我原来问题的答案:

如何使用MVVM模式“禁用”WPF中的按钮?

通过使用命令模式。 在您的视图模型中:

public class MyViewModel : ViewModel { private readonly ICommand someCommand; public MyViewModel() { this.someCommand = new DelegateCommand(this.DoSomething, this.CanDoSomething); } public ICommand SomeCommand { get { return this.someCommand; } } private void DoSomething(object state) { // do something here } private bool CanDoSomething(object state) { // return true/false here is enabled/disable button } } 

在你的XAML中:

  

阅读这篇文章 ,了解有关DelegateCommand更多信息。

只需将Button的IsEnabled属性绑定到CanClose即可:

  

如果返回ICommand的CanExecute值为false,则将禁用Button。 因此,无论您的按钮绑定了什么命令,当您要禁用它时,查看是否可以返回CanExecute值false。

这也有效:

查看

   

ViewModel

  private bool _btnEnabled; public bool btnEnabled { get { return _btnEnabled; } set { if (_btnEnabled != value) { _btnEnabled = value; OnPropertyChanged(); } } }