CommandManager.InvalidateRequerySuggested()无效

时间:2012-03-27 15:24:25

标签: wpf icommand

我的命令的 CanExecute 方法只在wpf应用启动时调用一次。我希望能够定期重新评估该方法。我发现一些引用以编程方式或使用 DispatcherTimer 调用 CommandManager.InvalidateRequerySuggested()。对我来说都不起作用,CanExecute每个应用程序生命周期只调用一次。

任何人都知道修复?

-pom-

1 个答案:

答案 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();
         }
      }
   }
}

不完全是你所追求的,但我希望它有所帮助。