Модель MVVM со списком? - PullRequest
       5

Модель MVVM со списком?

4 голосов
/ 05 марта 2011

У меня есть приложение silverlight wp7, и я применяю шаблон MVVM. Модель содержит список классов (тип класса инкапсулирует данные тикера акций), и этот список используется в представлении вместе с шаблоном Item.

Насколько я понимаю, для того, чтобы этот List работал с Binding, он должен быть наблюдаемой коллекцией (кажется, что событие PropertyChanged ничего не делает).

Как так, как мне поддерживать разделение между моей моделью, которая должна быть независимой от представления, и представлением, которое требует наблюдаемой коллекции?

В настоящее время в моей View-Model я динамически создаю наблюдаемую коллекцию, используя данные из model.List. Это похоже на кучу.

Ответы [ 2 ]

3 голосов
/ 05 марта 2011

Есть только два способа сделать это:

  1. Пусть модель сама выставит ObservableCollection. Это означает, что вам не понадобится никакой помехи в вашей ViewModel, но вы можете сказать, что это просто перемещает проблему в другое место.

  2. Пусть ViewModel предоставляет коллекцию ObservableCollection, которую она создает сама, как вы делаете сейчас. Если коллекция может быть обновлена ​​(что не похоже на случай в вашем сценарии), ViewModel также нужно будет «взять на себя ответственность» Модели и распространить изменения обратно на List.

Я не верю, что то, что вы делаете, - это клудж. Модель определенно полностью отделена от презентации (View), так как именно ViewModel нужно приложить все усилия, чтобы все заработало. Это полностью в духе MVVM.

1 голос
/ 06 марта 2011

Я согласен с тем, что это не клочок, и для практических условий наилучшим решением является то, что ваша модель представляет наблюдаемую коллекцию, особенно если вы собираетесь обновить ее из внешних источников.

Ваши двадругие параметры используют команду relay из любого источника, которая может обновить список, чтобы сообщить модели представления, что ему необходимо выполнить повторную синхронизацию, или добавить обработчик в вашей модели представления в событие itemadded списка, которое затем добавит этот элемент в вашу наблюдаемую коллекцию в виртуальной машине..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...