2010-12-30 1 views
0

Ich habe einen Befehl - AddCommand, der die Benutzer der Datenbank hinzufügen muss. Die Geschäftslogik, die der Datenbank hinzugefügt werden soll, befindet sich in den ViewModel-Methoden (Add_to_Db, Delete_from_Db). Aber ich brauche den Befehl (AddCommand), um auf das Viewmodel (für alle Methoden) zuzugreifen, ohne das Viewmodel als CommandParameter von XAML zu übergeben.Wie kann ein Befehl (abgeleitet von einem ICommand) auf ein Viewmodel zugreifen

Da ich andere Informationen (UserInfo) als CommandParameter an den Befehl übergeben muss. Wie kann ein Befehl auf das zugehörige ViewModel zugreifen?

+0

Ich muss Ihre Frage missverstehen, aber sollte der RelayCommand nicht eine Eigenschaft des ViewModels sein? Mit anderen Worten, es sollte bereits Zugriff auf das ViewModel haben, wo Sie einen Zustand wie Ihre UserInfo pflegen können. – Mathias

+0

Ich verwende nicht RelayCommand, sondern einen normalen Befehl. So können Methoden von ViewModel nicht an den Befehl übergeben werden (im Vergleich zum Befehlskonstruktor in Relay Command), wenn der Befehl im View-Modell erstellt wird. – Santosh

Antwort

0

Verwenden Sie DelegateCommand.

Referenzen:

MVVM Infrastructure: DelegateCommand

How to implement a reusable ICommand

Alles, was Sie tun, ist ein Verfahren zur Herstellung Sie ViewModel Klasse dieser DelegateCommand übergeben, die Befehl ausgeführt wird, wenn sie ausgeführt wird. Auf diese Weise können Sie auf Ihre ViewModel zugreifen. Und es ist wiederverwendbar und weit verbreiteter Ansatz auch.

+0

Wenn ich DelegateCommand nicht verwenden möchte (was grundsätzlich irgendeine Methode annimmt), wie kann dann auf das View-Modell zugegriffen werden? – Santosh

+0

Wenn nicht delegieren Befehl, welche Art von Implementierung würden Sie verwenden? Post ein Beispiel und ich könnte andere Wege vorschlagen. – decyclone

+0

Ich stimme zu Delegate Command ist einfacher.Aber ich wollte nur einen Befehl (abgeleitet von ICommand) für verschiedene Operationen wie Hinzufügen, Löschen, Ändern von Daten auf Benutzeraktionen (Schaltfläche klicken) und dann geschäftliche Vorgänge (zB.add/delete/modify) mit geeigneten Methoden (add/delete/modify) von ViewModel in den execute() Methoden der jeweiligen Befehle (add/delete). Aber wie greife ich auf diese Methoden (add/delete) von viewmodels in der execute() Methode zu des Befehls. => 1 Weg besteht darin, das viewmodel-Objekt als CommandParamter zu übergeben. Auf welche anderen Wege kann das viewmodel-Objekt von der execute() -Methode der Befehle zugreifen. – Santosh