Использование ленты Microsoft (или другой) с большим проектом и MVVM

Наше приложение - это большой проект с множеством модулей и представлений. В главном окне есть лента, и мы ищем лучший способ интегрировать ленту в приложение.

Я создал службу, модули которой представления могут регистрировать, чтобы добавлять элементы ленты, соответствующие им, и, кроме того, любой экземпляр основного представления может предоставить собственные элементы ленты, относящиеся к этому экземпляру. RibbonItem - это небольшой класс, который абстрагирует параметры элемента ленты и в основном имеет Title, Description, Command, UIType и ChildItems. Служба отвечает за перестройку ленты при изменении основного представления.

Мой коллега считает, что это плохой MVVM, поскольку пользователям нужно разрабатывать представление ленты в коде C #, а не в XAML, и он также сказал, что это будет Таким образом, будет сложно сделать группу элементов отключенной или включенной сразу, поскольку каждая команда этих элементов должна будет обновлять свой CanExecute отдельно. Вместо, он предложил иметь основные файлы Ribbon View и ViewModel, где каждый разработчик, который хочет добавить кнопку ленты для своего модуля или представления, должен будет добавить их в View XAML и добавить соответствующую команду в ViewModel. Кроме того, VisualStates будет использоваться для определения того, какие элементы будут отображаться или включаться в зависимости от изменений в ViewModel (таких как изменение представления или изменение выбора). Мне действительно не нравится это решение, в основном потому, что всем разработчикам придется поместить свои знания о модулях в один большой файл.

Обратите внимание, что некоторые элементы на ленте (например, «Параметры», «Выход») являются общими для всего приложения, а некоторые относятся к определенному домену приложения, а некоторые - только к определенному виду.

Изменить: Думаю, мой главный вопрос - каков рекомендуемый способ позволить нескольким группам разработчиков интегрироваться на одной ленте? Если у нас есть один RibbonView и один RibbonViewModel, который будет содержать все возможные элементы на ленте, и каждая команда будет добавлять свои элементы в эти V / VM, а также определять логику того, когда их показывать (возможно, используя визуальное состояние) ? Или мы разрешаем каждому представлению, модели представления или модулю регистрировать элементы ленты (в их собственном коде C #) для службы, а затем заставляем службу отображать ленту по мере необходимости, когда активное представление изменяется со всеми элементами, зарегистрированными для этого типа? Или есть лучший способ достичь такой интеграции?

Как вы думаете? и каждая команда добавит свои элементы в эти V / VM, а также определит логику того, когда их показывать (возможно, используя визуальное состояние)? Или мы разрешаем каждому представлению, модели представления или модулю регистрировать элементы ленты (в их собственном коде C #) для службы, а затем заставляем службу отображать ленту по мере необходимости, когда активное представление изменяется со всеми элементами, зарегистрированными для этого типа? Или есть лучший способ достичь такой интеграции?

Как вы думаете? и каждая команда будет добавлять свои элементы в эти V / VM, а также определять логику того, когда их показывать (возможно, используя визуальное состояние)? Или мы разрешаем каждому представлению, модели представления или модулю регистрировать элементы ленты (в их собственном коде C #) для службы, а затем заставляем службу отображать ленту по мере необходимости, когда активное представление изменяется со всеми элементами, зарегистрированными для этого типа? Или есть лучший способ достичь такой интеграции?

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

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

Как вы думаете? У вас есть лучшее представление или мнение о том, как управлять единым ленточным ресурсом, который является общим для нескольких разработчиков?

Спасибо, splintor

8
задан splintor 6 April 2011 в 21:30
поделиться