MVVM, что часть шаблона, ответственного за группировку datagrid

Я был несерьезен вокруг с шаблоном MVVM, и теперь я пытаюсь реализовать немного приложения на основе его.

Это приложение имеет datagrid, в котором, удивительно достаточно, представлены некоторые данные. Теперь я пытаюсь добавить некоторую группирующуюся способность к нему. Я знаю, как записать это в коде (C# и XAML), но я задаюсь вопросом, в какой слой я должен поместить ответственный код.

Одна часть меня говорит мне, что это должно быть в представлении, потому что это - код специально для того определенного представления. Это не универсально и служит одному purpos: сгруппировать данные.

С другой стороны, я думаю, что должен обработать его в ViewModel с помощью команды. Это чувствует, тем не менее, как будто я загрязняю свой ViewModel Представлением определенная логика.

Какой-либо свет, который может быть пролит на это?

5
задан user362397 11 June 2010 в 08:11
поделиться

3 ответа

В большинстве моих MVVM-приложений я стараюсь разделить обязанности следующим образом:

  • Представление должно просто выполнять простой перевод данных модели представления в пиксели. Обычно в результате получается в основном XAML и очень мало кода позади.
  • Модель представления должна выполнять специфическую для представления логику, такую как группировка и т.д. Часто я даже использую несколько вью-моделей для каждого вида. Вы можете иметь главную вью-модель, которая открывает список вью-моделей для каждой группы в вашем представлении, например, для реализации группировки.
  • Если у вас есть логика, которая применяется к более чем к одной модели представления, то это, вероятно. логика домена и должна идти в доменную модель.

Поэтому я думаю, что группировка должна быть в модели представления.

7
ответ дан 14 December 2019 в 08:42
поделиться

На этот вопрос нет единого ответа. Это действительно зависит от вашего сценария:

1) Имеет ли пользователь какое-либо влияние на этот вопрос? Если нет, и это фиксированная группировка, я бы опубликовал свойство с IGrouping и использовал dataservice или LINQ, чтобы сделать это до того, как оно попадет в представление.

Как правило, группировка в представлении менее производительна, но это не однозначный выбор. Если пользователь может выбрать множество различных группировок, это может быть штрафом, который стоит заплатить за дополнительное удобство использования.

0
ответ дан 14 December 2019 в 08:42
поделиться

, если пользователь имеет какое-то влияние на группировку, я бы привязал к ICollectionView , предоставленному ViewModel. Представление поддерживает группировку, фильтрацию, сортировку и валюту, а интерфейс ICollectionView взят из System.ComponentModel, поэтому вам не придется добавлять ссылку на графический интерфейс в свой проект ViewModel. Также WPF DataGrid поддерживает интерфейс ICollectionView.

Если пользователь не влияет на группировку (группы фиксированы), я бы просто «предварительно» -группировал данные в модели. HTH.

0
ответ дан 14 December 2019 в 08:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: