MVVM / WPF: Использование ObservableCollection <T>в качестве списка в модели предметной области - это хорошо или плохо? - PullRequest
1 голос
/ 21 мая 2010

У меня есть агрегированные модели, такие как Клиент: Заказ: Продукт.

Поскольку мой вид привязан к BillingViewModel, у которого есть свойство Customers типа ObservableCollection

и у ОДНОГО клиента в этой коллекции есть «список» заказов с именем ObservableCollection

и ОДИН заказ в этой коллекции имеет «список» товаров с именем ObservableCollection

Ну, мне нужны ObservableCollection для привязки данных, но должна ли модель домена действительно иметь ObservableCollection? обычно он имеет

Список или IEnumerable!

Это вредная привычка или побочные эффекты?

Я добавляю объяснение к вышесказанному, что правильно:

class Customer
{
   int CustomerID {get;set;}
   ObservableCollection<Order> { get;set;}
}

class BillingViewModel
{
  ObservableCollection<Customer> _customers;

public BillingViewModel()
{

  Customers= GetAggregatedCustomersOrdersProductsFromRepository();

}

public ObservableCollection<Customer> Customers
{
   get{ return _customers;}
   set
{
  _customers = value;
  this.RaisePropertyChanged("Customers");

}
}

}

Надеюсь, теперь все понятно! У меня есть ObservableCollection в моих ViewModel и Model!

Ответы [ 2 ]

1 голос
/ 22 мая 2010

Из приведенных мною примеров видно, что одной из практических мер является использование модели вашего домена Customer: Order: Product и ее перегруппировка в MainViewModel: CustomerViewModel: OrderViewModel: ProductViewModel, когда она достигает клиентской стороны. Это позволит вам пометить любую из виртуальных машин как грязную и сохранить только при необходимости. Это также позволит вам составить представление нескольких представлений, каждое из которых будет управляться своей собственной виртуальной машиной, поэтому, если позже вы решите изменить представление с одного большого экрана на несколько модалов, это будет довольно легко. Причиной для MainViewModel является скорее контроллер, чем ViewModel, его обязанностью было бы получить модель домена и разбить ее на виртуальные машины, а также может быть контроллером для отображения ваших представлений (сгруппированных или модальных), он также может содержать такие команды, как SaveAllDirty.

0 голосов
/ 21 мая 2010

Зависит от того, нуждаются ли эти свойства во встроенном уведомлении об изменениях. Если у вас есть какая-то логика, которая зависит от того, что вы делаете, когда они меняют состояние, тогда это нормально. Если он предназначен только для поддержки привязки данных, и этот класс сам по себе не является ViewModel, то я думаю, что это плохая форма.

...