Ich habe eine Haupt ViewModel
enthält eine Liste von Elementen, die ich in einer bestimmten Anzahl von UserControls
, die in einer ContentControl
in der Hauptansicht angezeigt werden. Meine derzeitige Art des Datenaustausches zwischen der ViewModels
besteht darin, einen Verweis auf jeden der ViewModels
in der Haupt , und einer der wichtigsten ViewModel
in jedem UserControl
. Allerdings weiß ich nicht, ob dies der richtige Weg ist, da ich eine ViewModelLocator
habe und ich erwarte, dass diese Klasse einige Funktionen hat, um so etwas zu unterstützen.Zugriff auf Eigenschaften in anderen ViewModels in MVVM Light
Kann mir bitte jemand sagen, ob das, was ich mache, OK ist, oder ob es eine bessere Möglichkeit gibt, dies in MVVM Light zu tun?
EDIT:
ich das gefunden, wenn ich für etwas anderes gesucht wurde, wäre dies eine bessere Lösung?
private ViewModelLocator locator = new ViewModelLocator();
Und dann die Locator-Eigenschaften verwenden, um jedes ViewModel zu referenzieren?
EDIT2:
Offenbar was ich dachte, nicht auf den ersten nicht funktionieren würde, hatte ich nur Verweise im Haupt ViewModel
und dies funktioniert, aber wenn ich versuchen, diese in der UserControls
es irgendwie stürzt meine Anwendung. Ich versuche gerade die mögliche Lösung des ersten Schnitts.
MainViewModel.cs (andere sind ähnlich, nur mit Bezug auf das Hauptansichtsmodell)
public class MainViewModel : ViewModelBase
{
private ItemAddViewModel itemAddViewModel;
private ItemsViewModel itemsViewModel;
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
ItemsList = Item.GetItemsList();
itemAddViewModel = ServiceLocator.Current.GetInstance<ItemAddViewModel>();
itemsViewModel = ServiceLocator.Current.GetInstance<ItemsViewModel>();
ShowItemsView();
}
...
private void ShowItemsView()
{
CurrentControl = itemsViewModel;
}
...
Ja, Sie haben recht, ich habe es gerade getestet und es funktioniert wie es sollte, danke für die detaillierte Lösung, es ist sehr geschätzt! :) – Kryptoxx
Ich bin froh, dass es geholfen hat :). Und Sie können natürlich einen ausgefeilteren IOC-Container verwenden, mit dem Sie viel mehr Tricks machen können als Singleton Viewmodels und Konstruktorabhängigkeits-Injection. Einfaches IOC ist einfach ... – eMko