Najlepsze podejście do tworzenia nowego okna w WPF przy użyciu MVVM
W sąsiednim wpisie:Jak ViewModel powinien zamknąć formularz? Opublikowałem moją wizję zamknięcia okien za pomocą MVVM. A teraz mam pytanie: jak je otworzyć.
Mam główne okno (główny widok). Jeśli użytkownik kliknie przycisk „Pokaż”, pojawi się okno „Demo” (okno modalne). Jaki jest lepszy sposób tworzenia i otwierania okien za pomocą wzorca MVVM? Widzę dwa ogólne podejścia:
Pierwszy (prawdopodobnie najprostszy). Obsługa zdarzeń „ShowButton_Click” powinna być zaimplementowana w kodzie za głównym oknem w taki sposób:
private void ModifyButton_Click(object sender, RoutedEventArgs e)
{
ShowWindow wnd = new ShowWindow(anyKindOfData);
bool? res = wnd.ShowDialog();
if (res != null && res.Value)
{
// ... store changes if neecssary
}
}
Jeśli stan przycisku „Pokaż” powinien zostać zmieniony (włączony / wyłączony), musimy dodać logikę, która będzie zarządzać stanem przycisku;Kod źródłowy jest bardzo podobny do źródeł WinForm i MFC w starym stylu - nie jestem pewien, czy jest to dobre czy złe, proszę doradzić.Coś innego, co przegapiłem?Inne podejście:
W MainWindowViewModel zaimplementujemy właściwość „ShowCommand”, która zwróci interfejs komendy ICommand. Comman z kolei:
podniesie „ShowDialogEvent”;zarządza stanem przycisku.Takie podejście będzie bardziej odpowiednie dla MVVM, ale będzie wymagało dodatkowego kodowania: klasa ViewModel nie może „pokazać okna dialogowego”, więc MainWindowViewModel podniesie tylko „ShowDialogEvent”, MainWindowView, który będziemy musieli dodać do obsługi zdarzeń w swojej metodzie MainWindow_Loaded, coś takiego :
((MainWindowViewModel)DataContext).ShowDialogEvent += ShowDialog;
(ShowDialog - podobny do metody „ModifyButton_Click”).
Oto moje pytania: 1. Czy widzisz inne podejście? 2. Czy uważasz, że jeden z wymienionych jest dobry lub zły? (czemu?)
Wszelkie inne myśli są mile widziane.
Dzięki.