我正在努力掌握WPF和MVVM,并取得了很好的进展。WPF和MVVM方面的事情进展顺利。
然而,XAML和数据绑定方面是另一回事:)
我该如何“禁用”一个按钮?
例如,我在视图模型中有一个CanClose属性,它决定了应用程序当前是否可以关闭。如果一个工作线程正在做一些事情,那么这个属性被设置为false,我想要么灰显按钮,要么通过某种绑定以某种方式在视觉上禁用Close按钮。
我该怎么做呢?
谢谢!
编辑-
可惜我只能接受一个答案。
这两个答案对我帮助很大。在肯特的帖子中,他更进一步解释了为什么你应该在应用程序中实现命令基础设施,而不是像我问的那样禁用按钮:
如何使用MVVM模式在WPF中“禁用”按钮?
我最初问题的答案是
如何使用MVVM模式在WPF中“禁用”按钮?
6条答案
按热度按时间h9a6wy2h1#
只需将Button的IsEnabled属性绑定到CanClose:
tvz2xvvm2#
通过使用命令模式。在您的视图模型中:
在XAML中:
阅读this post以了解有关
DelegateCommand
的更多信息。b91juud33#
如果你返回ICommand的CanExecute一个false值,那么Button将被禁用。所以无论你的按钮绑定到什么命令,看看你是否可以在你想禁用它的时候返回CanExecute一个false值。
v9tzhpje4#
这也起作用:
查看:
视图模型:
dtcbnfnu5#
这里的很多答案都是旧的,我不确定它们是否仍然是最新的。下面是我如何使用RelayCommand做到这一点的。我在.xaml中有一个保存保存按钮,它绑定到视图模型中的一个中继命令类的示例。中继命令还接受一个参数,该参数可以绑定到xaml中以传递对视图对象的引用。当视图模型中的一个属性发生变化时,我调用
SaveCommand.RaiseCanExecuteChanged();
来执行按钮,它是CanSave longic。下面是视图模型:
下面是RelayCommand类
最后是xaml:
khbbv19g6#
ViewModel文件中的更改:
public bool IsButtonEnabled { get { return _isButtonEnabled;}
按钮的XAML文件中的更改:IsEnabled="{Binding IsButtonEnabled}”