2017-08-31 1 views
0

Ich habe eine Ansicht mit mehreren Button s und genauso viele Command s. Für jeden Command Ich denke, ich muss ICommand implementieren. Mein Programm wird eine Zustandsmaschine enthalten, daher ist es möglich, dass die CanExecute der Befehle die Laufzeit ändert. Das einzige Implementierungsbeispiel der CanExecuteChanged ist this:Richtige Implementierung von CanExecuteChanged

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

Aber here es heißt, dass diese Implementierung eine schlechte Lösung. RaiseCanExecuteChanged() sollte verwendet werden.

Aber ich kann eine richtige Implementierung der CanExecuteChanged mit RaiseCanExecuteChanged nicht finden. Here finde ich ein einfaches Beispiel, aber der Benutzer heißt es

eine sehr einfache Implementierung ist (was wahrscheinlich eine Nullreferenceexception wirft gelegentlich)

Ich ziehe es Code, der in einem nicht Ausnahmen einmal werfen während. Hat jemand ein besseres Beispiel?

Antwort

0

Sie benötigen nur eine Implementierung der ICommand Schnittstelle.

Sie könnten einen Blick auf, wie die RelayCommand Klasse in MvvmLight implementiert ist, die eine beliebte, aber leichte MVVM Bibliothek ist: https://github.com/paulcbetts/mvvmlight/blob/dce4e748c538ed4e5f5a0ebbfee0f54856f52dc6/GalaSoft.MvvmLight/GalaSoft.MvvmLight%20(NET35)/Command/RelayCommand.cs

Es hat eine RaiseCanExecuteChanged() Methode, die das Ereignis CanExecuteChanged einfach erhöht. Sie sollten diese Methode immer dann aufrufen, wenn Sie den Befehl "aktualisieren" möchten.

Sie könnten sogar laden Sie die MvvmLight Baugruppen und verwenden Sie die RelayCommand Klasse direkt in der Anwendung: https://www.nuget.org/packages/MvvmLight/