Да, ваши опасения верны, вам придется обернуть все функции ObservableCollection
.
Мой ответ на вопрос: зачем вам уже иметь обертку для модели представления, которая кажется хорошей моделью? Модель представления полезна, если ваша модель данных основана на некоторой несвязываемой бизнес-логике. Обычно этот уровень бизнес / данных имеет один или два способа извлечения данных и уведомления внешних наблюдателей об их изменениях, которые легко обрабатываются моделью представления и преобразуются в изменения в ObservableCollection
. Фактически, в .NET 3.5 ObservableCollection
был частью WindowsBase.dll , поэтому обычно он не будет использоваться в моделях данных.
Мое предложение - либо логика, которая заполняет / изменяет ObservableCollection
, должна быть перемещена из вашей модели данных в модель представления, либо вы должны просто привязаться непосредственно к слою, который вы в настоящее время называете моделью данных, и просто назвать его тем, чем он является. Модель вида.
Очевидно, что вы можете написать вспомогательный класс, который будет синхронизировать две коллекции с использованием некоторых лямбда-преобразователей (от Item
до ItemViewModel
и обратно) и использовать его повсюду, как это (хотя убедитесь, что вы обрабатываете уникальность элемента правильно) Однако, IMHO, этот подход порождает избыточное количество классов-оболочек, и каждый уровень снижает функциональность и добавляет сложность. Что совершенно противоположно целям MVVM.