Zaleca się odczytywanie w systemie Messaging w zestawie narzędzi MVVM. To chyba najprostsze podejście, jakie udało mi się osiągnąć.Oto przykład, jak to działa:
Jeśli masz 2 Widok modeli - 1 dla klientów poszukujących, drugi do wyświetlania szczegółowych informacji o wybranym klientem:
W pierwszym modelu widoku, masz nieruchomości, takich jak to:
public string CustomerID
{
get
{
return _customerid;
}
set
{
if (_efolderid == value)
{
return;
}
var oldValue = _customerid;
_customerid = value;
// Update bindings and broadcast change using GalaSoft.MvvmLight.Messenging
RaisePropertyChanged("CustomerID", oldValue, value, true);
}
}
Następnie, w drugim modelu widoku zarejestrować otrzymywać wiadomości, gdy wartość ta zmienia się od innych, takich jak to:
void registerForMessages()
{
Messenger.Default.Register<PropertyChangedMessage<string>>(this,
(pcm) =>
{
if (pcm.PropertyName == "CustomerID")
{
customerID = pcm.NewValue;
AddWorkplanCommand.RaiseCanExecuteChanged();
loadCustomerDetails();
}
});
}
Be z pewnością wywołaj funkcję registerForMessages() w konstruktorze drugiego modelu widoku. Inną rzeczą, która pomaga, jest stworzenie mapy rodzajów, gdy masz 4 lub więcej modeli ViewModels w swojej aplikacji. Moim zdaniem łatwo jest skonstruować taki plik w pliku tekstowym w rozwiązaniu, aby śledzić wszystkie wiadomości i to, co mają osiągnąć oraz jakie inne modele widoku są zarejestrowane, aby je otrzymać.
Jedną z naprawdę fajnych rzeczy jest to, że masz 1 model wyświetlania, który wysyła powiadomienie o zmianie, takie jak zmieniona właściwość customerID, i od razu otrzymuje 4 inne modele wyświetlania, które otrzymują tę zmianę, a wszystkie same zaczynają ładować zmiany.
Moje pytania były bardziej związane z ładowaniem różnych widoków. Rozumiem mechanizm wiązania z ViewModel. Ale gdzie mogę napisać kod, aby pokazać nowy widok, gdy użytkownik wykonuje, na przykład przycisk "Pokaż szczegóły"? –