Ian*_*n P 21 c# wpf xaml .net-3.5
我正在努力掌握WPF和MVVM,并且取得了很好的进展.WPF和MVVM方面的进展顺利.
但是,XAML和数据绑定方面是另一个故事:)
我如何"禁用"按钮?
例如,我的视图模型中有一个CanClose属性,用于确定当前是否可以关闭应用程序.如果一个工作线程没有做某事,那么这个属性设置为false,我想要灰显按钮,或者通过某种绑定以某种方式在视觉上禁用关闭按钮.
我该怎么做呢?
谢谢!
编辑 -
太糟糕了我只能接受一个答案.
这两个答案对我帮助很大.在Kent的帖子中,他更进一步解释了为什么要在应用程序中实现命令基础结构,而不是按照我提出的方式禁用按钮:
以及我原来问题的答案:
Qua*_*ter 38
只需将Button 的IsEnabled属性绑定到CanClose即可:
<Button IsEnabled="{Binding CanClose}"/>
Run Code Online (Sandbox Code Playgroud)
Ken*_*art 34
通过使用命令模式.在您的视图模型中:
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
}
}
Run Code Online (Sandbox Code Playgroud)
在你的XAML中:
<Button Command="{Binding SomeCommand}">Do Something</Button>
Run Code Online (Sandbox Code Playgroud)
阅读这篇文章,了解更多关于DelegateCommand
.
Aka*_*ava 10
如果返回ICommand的CanExecute值为false,则将禁用Button.因此,无论您的按钮绑定了什么命令,当您要禁用它时,查看是否可以返回CanExecute值false.