Zugreifen auf Eigenschaften in anderen ViewModels in MVVM Light

8

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%     
Kryptoxx 04.06.2013, 08:29
quelle

3 Antworten

17

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%     
eMko 04.06.2013, 08:45
quelle
1

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.

    
Paul Demesa 04.04.2015 22:44
quelle
1

Sie können auf die öffentlichen Eigenschaften von ViewModel Locator programmatisch zugreifen, indem Sie den Locator aus den Apps-Ressourcen beziehen:

%Vor%

oder durch Erstellen einer anderen statischen Instanz in der ViewModelLocator-Klasse:

%Vor%

Ähnliche Themen

    
CodyF 03.01.2017 23:17
quelle

Tags und Links