Buduję proste prowadzenie dokumentacji finansowejpodanie. Model widoku głównego okna zawiera listę kont. Widok pokazuje tę listę (w widoku listy) wraz z panelem pokazującym szczegóły dotyczące aktualnie wybranego konta.
Najpierw związałem panel szczegółów iSelectedItem ListView do tej samej właściwości (typu Konto) w modelu widoku. Szybko jednak zdałem sobie sprawę, że panel szczegółów musi być powiązany z AccountViewModel, a nie bezpośrednio z instancją Konta.
Istnieje kilka sposobów zapewnienia tego modelu AccountViewModel:
- Powiąż panel szczegółów z osobną właściwością w modelu widoku. Kiedy SelectedItem ListView zmienia się, model widoku powinien utworzyć i ustawić tę nową właściwość na instancję AccountViewModel, która jest powiązana z wybranym kontem.
- Podaj modelowi widoku głównego listę AccountViewModels zamiast listy kont. Zarówno ListView z listą wszystkich kont, jak i panel szczegółów mogą być następnie powiązane z tą samą usługą w głównym modelu widoku.
- Posiadaj jeden AccountViewModel, zmieniając konto, do którego się odwołuje przy każdej zmianie właściwości SelectedItem ListView.
Czy są inne opcje? Który wybór polecasz?
Dziękuję Ci, Ben
Odpowiedzi:
1 dla odpowiedzi № 1Tym się właśnie zajmuję:
Podaj model widoku głównego listy AccountViewModels zamiast Lista kont.
Będzie ci to dobrze służyć na wiele sposobów. Zawsze stwierdzam, że ostatecznie, z tego czy innego powodu, muszę w jakiś sposób ulepszyć moje Modele, aby obsługiwać Widok, więc teraz zaczynam od tworzenia ViewModels.
The sposobem, w jaki możesz stwierdzić, że będzie to lepsza opcja, jest to, że wymaga mniej kodu. Moim zdaniem mniej kodu zawsze oznacza mniej błędów.
0 dla odpowiedzi nr 2
podoba mi się ta opcja
- Powiąż panel szczegółów z osobnym właściwość namodel widoku. Gdy SelectedItem zmiany ListView, model widoku powinien to utworzyć i ustawić nowa właściwość do wystąpienia AccountViewModel, który jest powiązany z wybranym kontem.
następnie możesz powiązać wybrany element z widokiemmodel i okienko szczegółów. można to przetestować niezależnie od widoku. Kiedy tworzysz listę kont, możesz także utworzyć listę modeli widoku konta, więc po zmianie wyboru nie musisz niczego tworzyć. w ten sposób twój viewmodel jest wszechstronny, reprezentując cały ekran, a nie tylko pływające fragmenty viewModel.
-1 dla odpowiedzi nr 3
Jak dotąd najbardziej podoba mi się pomysł nr 3 z oryginalnego postu z dwóch powodów:
- Ma korespondencję modelu od 1 do 1, co moim zdaniem najlepiej pasuje do wzorca M-V-VM.
- Ponieważ model widoku konta jest informowany, kiedy należyzmienić, aby wyświetlić szczegóły dotyczące innego konta, może zapytać użytkownika, czy chce zapisać niezapisane zmiany, zanim przejdzie do wyświetlania nowego konta (itp.).