2012-07-16 5 views
6

Ich erstelle eine WPF-Anwendung mit MVVMLight. Ich verwende ViewModelLocator, um Viewmodels zu erstellen. Mein Problem besteht darin, Parameter zwischen ihnen zu übergeben.So senden Sie Parameter zwischen Ansichtsmodellen mit Viewmodelocator

Zum Beispiel haben wir eine Situation:

Wir haben ein Raster mit einigen Einheiten, wenn einer von ihnen ist doubleclicked Ich brauche eine neue Ansicht mit Details dieser Einheit zu schaffen. Wie sende ich die ausgewählte Artikel-ID an ViewModel der neuen Ansicht?

+3

Hallo, verwenden Sie eine MessagingServices wie die von Galasoft oder Messaging von ViewModel zu View – ethicallogics

Antwort

3

Normalerweise würden Sie eine Art von Messaging-System verwenden, z. B. Prism EventAggregator oder MVVM Light Messenger.

Beide Systeme erinnern mich an ein Paging-System: Jeder Teil der Anwendung kann Nachrichten und jeden Teil der Anwendung senden und abonnieren, um auf Nachrichten zu hören.

Also Ihr Doubleclick-Befehl würde ein LoadItemMessage überträgt das ausgewählte Element Id enthält, und was auch immer zur Darstellung des Artikels verantwortlich ist, würde abonniert LoadItemMessages erhalten und würde das Element laden, wenn es ein LoadItemMessage hört.

Wenn Sie interessiert sind, habe ich einen kurzen Artikel in meinem Blog über Communication between Viewmodels with MVVM, die einen hohen Überblick über Event-Systeme gibt.

+1

Danke, ich wusste ein wenig über Messaging-System, aber Ihr Artikel machte die Dinge einfach – Eugene

1

Das ist ein Problem mit ViewModelLocator (um die Parameter von View Xaml an ViewModel zu übergeben). Was Sie tun können, ist Erstellen eines Eigenschafts-Parameters des Type-Objekts oder (des Typs Ihr SelectedItem) in der ViewModelLocator-Klasse. Binden Sie dies an das SelectedItem Ihres Grids und übergeben Sie es dann an Ihr neues ViewModel. Ich hoffe, das wird helfen. Hinweis: Wenn Sie die Eigenschaft des Typs Objekt erstellen, vergessen Sie nicht, es zu konvertieren.

+0

Wenn ich Sie richtig verstehe, kann Ihre Vorgehensweise funktionieren, aber es wird sehr schwierig sein, ein riesiges System zu verwalten. Könnten Sie mir bitte ein Codebeispiel geben, das mir hilft, das zu verstehen? Danke – Eugene

Verwandte Themen