Mam główny ViewModel
zawierający listę przedmiotów, których używam w określonej ilości UserControls
, które są wyświetlane w widoku głównym w widoku ContentControl
. Obecny sposób wymiany danych między ViewModels
polega na tworzeniu odniesienia do każdego z ViewModels
w głównym ViewModel
i jednym z głównych ViewModel
w każdym UserControl
. Jednak nie wiem, czy to jest właściwy sposób na zrobienie tego, ponieważ mam ViewModelLocator
i oczekuję, że ta klasa będzie miała jakąś funkcjonalność do obsługi czegoś podobnego.Uzyskiwanie dostępu do właściwości w innych modelach ViewModels w MVVM Light
Czy ktoś może mi powiedzieć, czy to, co robię to OK, czy jest lepszy sposób robienia tego w świetle MVVM?
EDIT:
Znalazłem to kiedy szukałem czegoś innego, to byłoby lepsze rozwiązanie?
private ViewModelLocator locator = new ViewModelLocator();
A następnie za pomocą Właściwości lokalizatora, aby odwołać się do każdego ViewModel?
EDIT2:
Podobno co myślałem, że nie działa, początkowo miałam tylko odniesień w głównym ViewModel
i to działało, ale gdy próbuję to w UserControls
to rodzaj awarii mojej aplikacji. Obecnie próbuję możliwe rozwiązanie pierwszej edycji.
MainViewModel.cs (inne są podobne, w odniesieniu tylko do głównego ViewModel)
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;
}
...
Tak, masz rację, właśnie to przetestowałem i działa tak, jak powinno, dzięki za szczegółowe rozwiązanie, jest to bardzo cenne! :) – Kryptoxx
Cieszę się, że pomogło :). I możesz oczywiście użyć bardziej wyrafinowanego kontenera IOC, który pozwala ci robić o wiele więcej trików niż singletonowe modele widokowe i iniekcję zależną od konstruktora. Proste IOC jest po prostu proste ... – eMko