2010-02-07 9 views
2

저는 이미이 질문에 대해 질문했지만, 혼란 스러울만한 것이 있습니다. WPF MVVM 패턴에 대한 자습서를 작성하고 있지만 자습서 에서처럼 ICommand 인터페이스를 구현하는 방법에 대해 자세히 설명하지는 않습니다. (확실하지 정말 얼마나 정확!?)WPF의 명령, 구현 질문

I 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 클래스에서는 생성자에서 람다 식을 사용하기 때문에 일부 대리자가 필요하지만 Execute 및 CanExecute와 함께 작동하는 것이 무엇이며 어떻게 작동하는지 확신 할 수 없습니다. 나는 Action<object>을 넣었지 만, 아마도 틀린 것 같습니다 ...

마지막으로 누군가가 ICommand를 구현하는 방법에 대한 지침서를 가르쳐 줄 수 있습니까?

감사합니다.

답변

3

조쉬 스미스 (Josh Smith)의 tutorial에서 릴레이 명령에주의를 기울여보십시오. 여기서 그는 그것을 구현합니다.

0

_execute 대리인은 Predicate<bool>이 아니어야하며 Action<object>이어야합니다. 어쨌든 Josh Smith의 RelayCommand 또는 MVVM 툴킷 DelegateCommand과 같은 기존 클래스를 사용하는 것이 어떻습니까?