Hallo liebes Forum,
.. Annäherung an MVVM - ich "erforsche" die RelayCommand Klasse und stecke da bei ein paar Verständnis Fragen:
1) Das Event wird doch von den Buttons denen dieses Command zugewiesen wird aboniert. d.h. wenn das Event gefeuert wird ruft der Button dann CanExecute auf um den aktuellen Status zu ermitteln.
Wenn jemand dieses Event aboniert (also der Button in XAML das Command-Binding hat) wird der "add" Teil aufgerufen und dort steht, daß das CanExecuteChanged Event auf dieses statische CommandManager Event hört.
So wie ich das verstehe würde das bedeuten, daß ein Command welches mehreren Buttons zugeteilt ist auch dementsprechend oft das CommandManager Event aboniert hat.
Das würde ja bedeuten, das der CommandManager wenn er dieses RequerySuggested feuert öfters hintereinander das selbe CanExecuteChanged von einem Command feuert und dann jeder Button für sich (obwohl eh alle dem selben Command gehorchen) aufruft. Funktioniert das so oder hab ich da ein Verstnändis Problem ?
2) wenn ich das CanExecuteChanged manuell auslösen will so muß ich das in einer Methode nach außen verfügbar machen weil in vererbten Klassen das Event nicht direkt feuerbar ist.
Aber selbst in meiner Basisklasse (s.o.) die nur das ICommand IF implementiert kann ich nicht mit "CanExecuteChanged(this, EventArgs.Empty)" das Event feuern. Es kommt der Fehler mit
" .. can only appear on the left hand side of += or -=" - was laut meinem ergoogelten Wissen nur bei abgeleiteten Klassen zutrifft. Wo liegt mein (Denk)Fehler
- danke
Gruß Michael
.. Annäherung an MVVM - ich "erforsche" die RelayCommand Klasse und stecke da bei ein paar Verständnis Fragen:
Code:
class RelayCommand : ICommand { .. public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } }
Wenn jemand dieses Event aboniert (also der Button in XAML das Command-Binding hat) wird der "add" Teil aufgerufen und dort steht, daß das CanExecuteChanged Event auf dieses statische CommandManager Event hört.
So wie ich das verstehe würde das bedeuten, daß ein Command welches mehreren Buttons zugeteilt ist auch dementsprechend oft das CommandManager Event aboniert hat.
Das würde ja bedeuten, das der CommandManager wenn er dieses RequerySuggested feuert öfters hintereinander das selbe CanExecuteChanged von einem Command feuert und dann jeder Button für sich (obwohl eh alle dem selben Command gehorchen) aufruft. Funktioniert das so oder hab ich da ein Verstnändis Problem ?
2) wenn ich das CanExecuteChanged manuell auslösen will so muß ich das in einer Methode nach außen verfügbar machen weil in vererbten Klassen das Event nicht direkt feuerbar ist.
Aber selbst in meiner Basisklasse (s.o.) die nur das ICommand IF implementiert kann ich nicht mit "CanExecuteChanged(this, EventArgs.Empty)" das Event feuern. Es kommt der Fehler mit
" .. can only appear on the left hand side of += or -=" - was laut meinem ergoogelten Wissen nur bei abgeleiteten Klassen zutrifft. Wo liegt mein (Denk)Fehler
- danke
Gruß Michael
Comment