/ / Обвързване към модел, който съдържа колекция / списък - wpf, collection, mvvm

Свързване към модел, който съдържа колекция / списък - wpf, колекции, mvvm

Изграждам прост финансов отчетприложение. Моделът на изглед на главния прозорец съдържа списък на акаунти. Изгледът показва този списък (в ListView) заедно с панел, показващ подробности за текущо избрания акаунт.

В началото обвързах панела с подробности иListView "s SelectedItem към същото свойство (от типа Account) на модела на изглед. Въпреки това, бързо разбрах, че панелът с подробности трябва да бъде обвързан с AccountViewModel, а не директно към инстанция на акаунт.

Има няколко начина за предоставяне на този AccountViewModel:

  • Свържете панела с подробности към отделна собственост на изгледния модел. Когато ListView „SelectedItem се промени, моделът на изглед трябва да създаде и зададе това ново свойство на екземпляр на AccountViewModel, който е свързан с избрания акаунт.
  • Дайте на модела на основния изглед списък на AccountViewModels вместо списък на акаунти. Както ListView, в който са изброени всички акаунти, така и панелът с подробности могат след това да бъдат обвързани със същото свойство на модела на основния изглед.
  • Имайте един AccountViewModel, променяйки акаунта, към който се отнася с всяка промяна в свойството SelectedItem на ListView.

Има ли други опции? Кой избор препоръчвате?

Благодаря ти, Бен

Отговори:

1 за отговор № 1

Това е което правя:

Дайте списък на модела на основния изглед AccountViewModels вместо an Списък на сметки.

Това ще ви служи добре по много начини. Винаги откривам, че в крайна сметка, по една или друга причина, трябва да увеличавам Моделите си по някакъв начин, за да поддържам View, така че тези дни просто започвам със създаването на ViewModels.

Най- по този начин можете да кажете, че това ще бъде по-добър вариант е, че включва по-малко код, По-малко код винаги се равнява на по-малко грешки, според мен.


0 за отговор № 2

харесвам тази опция

  • Завържете панела с подробности отделно имот намодела на изглед. Кога Промените в списъка на ViewView са избрани, view model трябва да създаде и зададе това нова собственост към инстанция на AccountViewModel, който е свързан с избрания акаунт.

след това можете да вържете избрания елемент към изгледамодел и панела с детайли. това може да се тества независимо от гледката. когато създавате списъка си с акаунти, можете също да създадете списък на модели на изглед на акаунти, така че когато промените селекцията, не е нужно да създавате нищо, което се намира там. по този начин вашият viewmodel е изчерпателен, представляващ целия екран, а не само плаващи битове на viewModel.


-1 за отговор № 3

Засега идеята, която ми харесва най-много, е №3 от оригиналния пост за два реала:

  • Има кореспонденция на модел от 1 изглед до 1 изглед, което според мен най-добре отговаря на модела M-V-VM.
  • Тъй като моделът на изглед на акаунта се казва кога дапромяна, за да се покажат подробности за различен акаунт, той може да попита потребителя дали иска да бъдат запазени незапазени редакции, преди да се промени, за да се покаже новия акаунт (и т.н.).