Использование MVVM с CollectionViewSource

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

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

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


person SeanVDH    schedule 01.11.2011    source источник


Ответы (1)


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

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

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

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

person Steve Greatrex    schedule 01.11.2011