Использование MVVM с CollectionViewSource - PullRequest
0 голосов
/ 01 ноября 2011

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

Я чувствую, что они должны войти в Модель, но тогда я не уверен, что связано с Видом.Должен ли я просто создать их как внешние классы, а затем ссылаться на них в Model / ViewModel?

Любая помощь приветствуется

1 Ответ

5 голосов
/ 01 ноября 2011

Во-первых, я бы сказал, что нет необходимости наследовать от ObservableCollection<T>, если вы не добавляете к нему функциональность, которую я редко, если вообще когда-либо требовал.

В большинстве случаев я создаю свойства ViewModel типа ObservableCollection<T> и затем заполняю их из модели при каждой загрузке данных. Это имеет то преимущество, что Модель не должна использовать ObservableCollection<T> (это может быть любое значение IEnumerable<T>), и это означает, что позже, когда я (почти неизбежно) захочу обернуть все, что я получаю от Модели в другая модель представления, специфичная для экземпляра. Я только обязан изменить существующие классы модели представления.

Если у вас есть свойство в вашей модели представления, вы можете просто связать свой CollectionViewSource с этим свойством, и оно будет делать все оттуда. Стоит отметить, что CollectionViewSource на самом деле не заботится о типе свойства, поэтому вы можете представить свою коллекцию в виде ICollection<T>, IEnumerable<T> или (я считаю) даже как object и CollectionViewSource все равно будет обрабатывать его так же, как если бы он был выставлен как ObservableCollection<T>.

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

...