Я был несерьезен вокруг с шаблоном MVVM, и теперь я пытаюсь реализовать немного приложения на основе его.
Это приложение имеет datagrid, в котором, удивительно достаточно, представлены некоторые данные. Теперь я пытаюсь добавить некоторую группирующуюся способность к нему. Я знаю, как записать это в коде (C# и XAML), но я задаюсь вопросом, в какой слой я должен поместить ответственный код.
Одна часть меня говорит мне, что это должно быть в представлении, потому что это - код специально для того определенного представления. Это не универсально и служит одному purpos: сгруппировать данные.
С другой стороны, я думаю, что должен обработать его в ViewModel с помощью команды. Это чувствует, тем не менее, как будто я загрязняю свой ViewModel Представлением определенная логика.
Какой-либо свет, который может быть пролит на это?
В большинстве моих MVVM-приложений я стараюсь разделить обязанности следующим образом:
Поэтому я думаю, что группировка должна быть в модели представления.
На этот вопрос нет единого ответа. Это действительно зависит от вашего сценария:
1) Имеет ли пользователь какое-либо влияние на этот вопрос? Если нет, и это фиксированная группировка, я бы опубликовал свойство с IGrouping и использовал dataservice или LINQ, чтобы сделать это до того, как оно попадет в представление.
Как правило, группировка в представлении менее производительна, но это не однозначный выбор. Если пользователь может выбрать множество различных группировок, это может быть штрафом, который стоит заплатить за дополнительное удобство использования.
, если пользователь имеет какое-то влияние на группировку, я бы привязал к ICollectionView , предоставленному ViewModel. Представление поддерживает группировку, фильтрацию, сортировку и валюту, а интерфейс ICollectionView взят из System.ComponentModel, поэтому вам не придется добавлять ссылку на графический интерфейс в свой проект ViewModel. Также WPF DataGrid поддерживает интерфейс ICollectionView.
Если пользователь не влияет на группировку (группы фиксированы), я бы просто «предварительно» -группировал данные в модели. HTH.