MVVM какая часть шаблона отвечает за группировку данных?

StackOverflow https://stackoverflow.com/questions/3021198

Вопрос

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

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

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

С другой стороны, я думаю, что мне следует обработать это в ViewModel с помощью команды.Однако такое ощущение, будто я загрязняю свою ViewModel специфичной для View логикой.

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

Это было полезно?

Решение

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

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

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

Другие советы

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

1) У пользователя есть какое влияние на вопрос? Если они этого не сделают, и это фиксированная группировка, я бы опубликую недвижимость с Igrouping и использовать DataService или Linq, чтобы сделать это до того, как он поступит в представление.

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

Если у пользователя есть некоторое влияние на группировку, я бы связывал с Iconlectionview. выставлен просмотрамоделью. Просмотр поддерживает группировку, фильтрацию, сортировку и валюту, а интерфейс IcollicateView от System.comPonentModel, поэтому вам не придется добавить ссылку «GUI» на ваш проект ViewModel. Также DataGrid WPF поддерживает интерфейс IcollingView.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top