2010-02-07 69 views
2

我知道我已经在这方面提出过问题,但这只是令人困惑。 我正在做一个关于WPF MVVM模式的教程,但看起来我无法做到,因为在本教程中,它没有详细介绍如何实现ICommand接口。 (不知道如何正确还真是!?)WPF中的命令,执行问题

我有以下实现的ICommand:

class ViewCommand : ICommand 
    { 
     #region ICommand Members 

     private Predicate<object> _canExecute; 
     private Predicate<bool> _execute(object param); 

     public ViewCommand(Action<object> action) 
     { 

     } 

     public bool CanExecute(object parameter) 
     { 
      return _canExecute == null ? true : _canExecute(parameter); 
     } 

     public void Execute(object parameter) 
     { 
      _execute(parameter); 
     } 

     public event EventHandler CanExecuteChanged 
     { 
      add { CommandManager.RequerySuggested += value; } 
      remove { CommandManager.RequerySuggested -= value; } 
     } 

     #endregion 
    } 

,现在这种用法:

class StartViewModel : ViewModel 
    { 
     public ViewCommand startViewCommand; 

     public ViewCommand StartCommand 
     { 
      get 
      { 
       if (startViewCommand == null) 
        startViewCommand = new ViewCommand(
         param => this.StartApplication()); // StartApplication returns void 
       return startViewCommand; 
      } 
     } 

我想不出什么我的构造函数ViewCommand类应该这样做?在StartViewModel类中,它在构造函数中使用了一个lambda表达式,所以需要一些委托,但我不确定使用Execute和CanExecute的含义和方式。我把Action<object>,但它可能是错误的...

最后,有人可以指向我的教程,如何实施ICommand解释它?

谢谢!

回答

3

看看乔希史密斯的tutorial注意中继命令,他在那里实现它。

0

您的_execute代表不应该是Predicate<bool>,它应该是Action<object>。无论如何,你为什么不使用Josh Smith的RelayCommand或MVVM工具包DelegateCommand这样的现有类?