我有一个带有CanExecute
方法的命令“ShowDataCommand”。
public override bool CanExecute(object parameter)
{
return _someFacade.CanCommandEnable();
}
当我启动我的应用程序时,CanExecute
被调用,并且取决于从Facade返回的值,它也是
启用或禁用该命令。
现在新要求是,主页面中有一个按钮。当用户单击该按钮时,会打开一个对话框 在时间对话框打开之前,应禁用“ShowDataCommand”。
当对话框打开且对话框关闭时,已经触发了一个事件。我已在命令中订阅了该事件。 事件以适当的真假值触发。
现在我不知道如何从此事件中禁用命令?我可以用这个新值以某种方式提升CanExecute
吗?
答案 0 :(得分:1)
您可以通过提升CanExecute
事件来强制再次调用命令的CanExecuteChanged
方法。
大多数ICommand
实现都有一个引发此事件的方法,因此如果您使用自己的实现,可以在类中添加一个方法,并在需要“刷新”命令时调用它,例如当您单击按钮:
public class YourCommandClass : ICommand
{
...
public void RaiseCanExecuteChanged() //<-- call this method
{
var handler = CanExecuteChanged;
if (handler != null)
handler(this, EventArgs.Empty);
}
}
有关RelayCommand
实施的示例,请参阅MvvmLight
中的ICommand
课程:https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs