我的命令的 CanExecute 方法只在wpf应用启动时调用一次。我希望能够定期重新评估该方法。我发现一些引用以编程方式或使用 DispatcherTimer 调用 CommandManager.InvalidateRequerySuggested()。对我来说都不起作用,CanExecute每个应用程序生命周期只调用一次。
任何人都知道修复?
-pom-
答案 0 :(得分:3)
我已经阅读过这种技术,但它不是我使用过的,或者我认为常用的技术。通常我会使用Prism的DelegateCommand或MVVM light的RelayCommand。这些实现了具有CanExecuteChanged事件的ICommand。然后,当视图模型的状态发生变化时,您负责引发此事件,例如
public class MyViewModel
{
DelegateCommand _myCommand;
public MyViewModel()
{
_myCommand = new DelegateCommand(ExecuteMyCommand, CanExecuteMyCommand);
}
public ICommand MyCommand
{
get{ return _myCommand; }
}
private void ExecuteMyCommand(){ ... }
private bool CanExecuteMyCommand() { return true/false; }
// for example
public int SomeProperty
{
get{ ... }
set{
...;
if( ... ){
_myCommand.RaiseCanExecuteChanged();
}
}
}
}
不完全是你所追求的,但我希望它有所帮助。