Там есть несколько вопросов, поэтому я приложу все усилия, чтобы охватить их все.
Я работал над проектом, в котором были WPF, MVVM и Prism наряду с другими фреймворками.Лучший совет - понять мощь и функциональность каждого из них, прежде чем склеить их все вместе.Вам не нужно использовать все функции Prism, чтобы он был полезен в этой ситуации.
Для Prism вы можете использовать ...
- Оболочка и загрузчик для инициализацииприложение и загрузка модулей из других сборок.
- Создание и настройка Unity для внедрения зависимостей.Вы можете использовать другие DI-контейнеры.Здесь вы можете добавить глобальные сервисы, которые будет использовать каждый модуль.
- Использование EventAggregator для уведомления различных частей приложения, обычно между модулями и представлениями
- Области для именования областей в пользовательском интерфейсе, чтобы модули могли добавлятьвид на конкретное местоположение.
Приведенные выше 4 не обязательно должны использоваться, но их можно легко интегрировать в приложение MVVM / WPF.
Например, будет ли моя "панель инструментов" оболочкой, содержащей области, которые будет заполнять каждый виджет?
Здесь вы можете создать область, которую вы создаете (вы можете получить производнуюиз региона), который будет управлять кнопками на панели инструментов.(Я использовал регион в отношении ленты).Служба может быть представлена через интерфейс, который каждый модуль может предоставить команду / образ (что бы у вас ни было), который при нажатии создаст ViewModel.Вы можете сделать это внутри Инициализации модуля.
Будет ли каждое новое окно, отображаемое при нажатии виджета, также представлять собой собственную оболочку с собственной настройкой региона?
Если каждая кнопка открывает новое окно, я бы предложил ввести общий класс контроллера, который создаст общее окно использования и присоединит модель представления, которую создает ваш модуль.В этом случае нет необходимости использовать регионы, если только вы не приклеиваете разные виды к окну приложения, которое остается открытым дольше срока действия самого представления.Окно в базовой форме может быть просто ...
<Window ...>
<ContentControl Content="{Binding}" />
</Window>
Где в вашем контроллере это можно сделать ...
public void DisplayView(ViewModel vm)
{
var window = new MyWindow { DataContext = vm };
window.Show();
}
Контроллер может использоваться непосредственно в вашем модулезавернутый в сервис ... хотя для тестабильности сервис и интерфейс были бы лучше.Убедитесь, что вы объединили ресурсы вашего модуля с Applicaiton.Resources
и используете DataTemplate
, чтобы связать ваше представление с моделью представления.
Мой вопрос: где будут события щелчка мышью / перемещения,писать что-то специфичное для диаграммы в этом представлении?
Не бойтесь кода позади, но в этом случае вы можете использовать EventToCommand присоединенное поведение, которое будет направлено ккоманда на вашей модели представления. MVVMLight В наборе есть такой инструмент, который вы можете использовать, если хотите.
DI очень мощный, и я рекомендую использовать его даже без Prism, так как создание моделей представлений будет проще.
НТН