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