/ / Powiązanie z modelem zawierającym kolekcję / listę - wpf, kolekcje, mvvm

Powiązanie z modelem zawierającym kolekcję / listę - wpf, collections, mvvm

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 № 1

Tym 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.).