ViewModel -> Модель взаимодействия - PullRequest
1 голос
/ 16 июня 2011

Предположим, у меня есть приложение WPF / MVVM для управления некоторыми гипотетическими клиентами:).

Модель домена содержит объект с именем Customer (представлен в коде как POCO).

Главный экран содержит сетку, связанную с моделью представления (CustomersViewModel), которая загружает свои данные из репозитория .

Главный экран также позволяет создавать новых клиентов (и сохранять их в БД).

Предположим, мне нужно реализовать вариант использования "добавить клиента". Наиболее очевидный подход заключается в следующем:

  1. Предоставление пользователю диалогового окна для заполнения новыми данными клиента.
  2. Обрабатывать нажатие кнопки «Сохранить» в ViewModel.
  3. Создание объекта домена customer (var new_customer = new Customer (..)) с использованием данных из диалога (шаг 1).
  4. Вызовите репозиторий .Save (new_customer), чтобы сохранить нового клиента в БД.
  5. Перезагрузите CustomersViewModel со свежими данными из БД, чтобы вновь добавленный клиент был виден в сетке.

Лично мне не нравится этот быстрый и грязный способ (из-за необходимости перезагружать полный список клиентов из БД при каждом добавлении нового клиента).

Может кто-нибудь предложить лучший подход (который не требует обновления списка клиентов из БД) ??? Я чувствую, что должна быть лучшая практика для обработки подобных сценариев :)).

Заранее спасибо!

Ответы [ 4 ]

0 голосов
/ 18 июня 2011

Вы можете создать ObservableCollection<Customer> и заполнить его клиентами из базы данных, которую вы хотите отобразить в представлении. При добавлении нового клиента добавьте его в эту коллекцию и сохраните в базе данных. CustomersView связывается с ObservableCollection и обновляется автоматически без необходимости обновления данных из базы данных.

Пример BookLibrary прикладной платформы WPF (WAF) показывает, как это можно сделать.

0 голосов
/ 16 июня 2011

Если вы загружаете список в своем представлении через привязку (к списку клиентов), вы можете просто добавить нового клиента в этот список, и все уже есть; -)

0 голосов
/ 16 июня 2011

У меня есть подобное приложение, где в UI создается объект.Я решаю это, добавляя объект в ВМ, а затем синхронизирую его с моделью по нажатию кнопки Сохранить.

Я предполагаю, что у вас есть список CustomerViewModel в CustomersViewModel, к которому привязано сеточное представление.Вы можете добавить новый объект CustomerViewModel в список в CustomersViewModel.Сохраняя данные ViewModel обратно в модель, модель синхронизируется с ВМ.Нет необходимости обновлять ВМ обратно из модели, если только кто-то, кроме вашего приложения, не меняет данные модели.

0 голосов
/ 16 июня 2011

Если сохранение Customer прошло успешно, почему вы не можете просто добавить этот единственный экземпляр Customer в свою коллекцию клиентов?Нет необходимости перезагружать всех клиентов, если пользователь явно не обновляет представление (обычно с помощью кнопки обновления).

...