Ich habe eine Hauptseite ViewModel
, die eine Liste von Elementen enthält, die ich in einer bestimmten Menge von UserControls
verwende, die in einem ContentControl
in der Hauptansicht angezeigt werden. Meine derzeitige Art des Datenaustausches zwischen ViewModels
besteht darin, einen Verweis auf jedes ViewModels
im Hauptteil ViewModel
und eines der Haupt ViewModel
in jedem UserControl
zu machen. Allerdings weiß ich nicht, ob dies der richtige Weg ist, da ich ein ViewModelLocator
habe und ich erwarte, dass diese Klasse eine gewisse Funktionalität hat, um so etwas zu unterstützen.
Kann mir bitte jemand sagen, ob das, was ich mache, okay ist, oder ob es eine bessere Möglichkeit gibt, dies in MVVM Light zu tun?
BEARBEITEN:
Ich fand das, als ich nach etwas anderem suchte, wäre das eine bessere Lösung?
%Vor%Und dann die Locator-Eigenschaften verwenden, um jedes ViewModel zu referenzieren?
EDIT2:
Offenbar, was ich dachte, würde funktionieren, zuerst hatte ich nur Referenzen in der Hauptsache ViewModel
und das hat funktioniert, aber wenn ich das in UserControls
versuche, stürzt es meine App ab. Ich versuche gerade die mögliche Lösung der ersten Bearbeitung.
MainViewModel.cs (andere sind ähnlich und beziehen sich nur auf das Haupt-ViewModel)
%Vor%Sie können den ViewModelLocator tatsächlich verwenden. Standardmäßig wird die Inversion des Steuercontainers verwendet. Selbst wenn Sie eine neue Instanz des Locators erstellen, erhalten Sie dieselbe Instanz von Singleton-Viewmodels aus dem Container.
Die Locator-Klasse:
%Vor%dann aus dem Code können Sie als
darauf zugreifen %Vor%Sie erhalten die einzige Instanz von viewmodel.
von xaml: Ressourcen (standardmäßig in Application.Resources in App.xaml)
%Vor%und DataContext für Ansichten (entweder Benutzersteuerelemente oder Fenster oder was auch immer)
%Vor%Wenn Sie nur eine Eigenschaft aus dem Hauptansichtsmodell binden müssen, verwenden Sie innerhalb des Inhaltssteuerelements einfach diese Syntax:
%Vor%Dabei steht xxxx für den Namen, der an das Inhaltssteuerelement angehängt ist (oder an ein beliebiges Steuerelement, dessen Hauptansichtsmodell DataContext ist). Alternativ können Sie die relative Bindung anstelle des Elementnamens verwenden.
Tags und Links c# mvvm-light