Полагаю, это будет зависеть от того, как вы хотите отображать данные. В конце концов ViewModel в первую очередь предназначен для обработки данных, которые требуются представлению.
Предполагая, что ваш уровень данных предоставляет вам только наборы данных, вы всегда можете ограничить создание элементов в ViewModel в зависимости от тех, которые вы действительно хотите видеть.
Например, у вас может быть таблица данных для отображения позиций заказа для данного заказа.
Таким образом, у вас может быть свойство ViewModel AllOrderItems, привязанное к сетке данных, и все же его метод получения выглядит следующим образом:
public List<OrderItems> AllOrderItems
{
get{return this.DataAccessLayer.GetOrderItems().Where(x=>x.OrderNumber==this.OrderNumber).toList();
}
Здесь DataAccessLayer - это класс, который хранит данные базы данных кэша и взаимодействует с базой данных. Если хранится как единое целое, дублирование данных в нем будет уменьшено.
Вы можете настроить вашу ViewModel так, чтобы она выполняла столько или меньше фильтрации данных из DataAccessLayer, сколько требуется. Коллекции могут быть Наблюдаемыми, если требуется, и DataAccessLayer может генерировать события для виртуальных машин, чтобы реагировать на случаи добавления, удаления, сохранения новых данных в базу данных.