2017-08-31 84 views
0

我有一個查看多個Button s和一樣多的Command s。對於每Command我想我將不得不實施ICommand。我的程序將包含一個statemachine,所以命令的CanExecute可能會改變運行時。 的CanExecuteChanged的唯一實現的例子thisCanExecuteChanged的正確實施

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

here中指出,這種實現是一個壞的解決方案。應該使用RaiseCanExecuteChanged()

但我找不到CanExecuteChangedRaiseCanExecuteChanged正確實施。 Here我發現一個基本的例子,但用戶稱它

是一個非常簡單的實現(這可能會偶爾丟一個NullReferenceException)

我更喜歡代碼,不以一次拋出異常而。有人有更好的例子嗎?

回答

0

您只需要執行一個接口ICommand

你可以看看在RelayCommand類是如何在MvvmLight這是一個受歡迎的,但重量輕MVVM庫實現的:https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs

它有一個RaiseCanExecuteChanged()方法,簡單地提高了CanExecuteChanged事件。每當你想「刷新」命令時,你都應該調用這個方法。

你甚至可以在你的應用程序直接下載MvvmLight組件和使用RelayCommand類:https://www.nuget.org/packages/MvvmLight/