我正在努力掌握WPF和MVVM并且取得了很好的进展。 WPF和MVVM方面的进展顺利。
然而,XAML和数据绑定方面是另一个故事:)
我如何“禁用”按钮?
例如,我的视图模型中有一个CanClose属性,用于确定当前是否可以关闭应用程序。如果一个工作线程没有做某事,那么这个属性设置为false,我想要灰显按钮或以某种方式通过某种绑定在视觉上禁用关闭按钮。
我将如何做到这一点?
谢谢!
修改
太糟糕了我只接受一个答案。
这两个答案对我帮助很大。在肯特的帖子中,他更进一步解释了为什么你应该在应用程序中实现命令基础结构,而不是按照我问的方式禁用按钮:
How does one "disable" a button in WPF using the MVVM pattern?
我原来问题的答案:
How does one "disable" a button in WPF using the MVVM pattern?
答案 0 :(得分:36)
只需将Button的IsEnabled属性绑定到CanClose:
<Button IsEnabled="{Binding CanClose}"/>
答案 1 :(得分:32)
通过使用命令模式。在您的视图模型中:
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中:
<Button Command="{Binding SomeCommand}">Do Something</Button>
阅读this post以了解有关DelegateCommand
。
答案 2 :(得分:10)
如果返回ICommand的CanExecute值为false,则将禁用Button。因此,无论您的按钮绑定了什么命令,当您想要禁用它时,看看是否可以返回CanExecute值false。
答案 3 :(得分:1)
这也有效:
查看强>:
<Button>
<Button.Style>
<Style>
<Setter Property="Content" Value="Scream" />
<Style.Triggers>
<DataTrigger Binding="{Binding btnEnabled}" Value="True">
<Setter Property="IsEnabled" Value="True" />
</DataTrigger>
</Style.Triggers>
</Style>
</Button.Style>
</Button>
<强>视图模型强>:
private bool _btnEnabled;
public bool btnEnabled
{
get { return _btnEnabled; }
set
{
if (_btnEnabled != value)
{
_btnEnabled = value;
OnPropertyChanged();
}
}
}
答案 4 :(得分:-1)
更改ViewModel文件:
公共布尔IsButtonEnabled { 得到{return _isButtonEnabled; }
set
{
if (_isButtonEnabled == value)
{
return;
}
_isButtonEnabled = value;
OnPropertyChanged("IsButtonEnabled");
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
XAML文件中Button的更改:IsEnabled =“ {Binding IsButtonEnabled}”