Правильный способ добавления кнопки на панель инструментов из модуля Prism в стиле MVVM

У меня есть составное приложение с панелью инструментов, и я хочу, чтобы мои модули добавили несколько кнопок на панель инструментов. Как я понял, RegionManager должен использоваться для предоставления такой возможности.

Я написал такой код:

public class MyModule : IModule
{
    private readonly IUnityContainer _container;
    public MyModule(IUnityContainer Container) { _container = Container; }

    public void Initialize()
    {
        var regionManager = _container.Resolve<RegionManager>();
        regionManager.RegisterViewWithRegion("MainToolbar",
                                             () => new Button
                                                   {
                                                       Content = "My Button",
                                                       Command = new DelegateCommand(/*  */)
                                                   });
    }
}

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

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

1 ответ

Ваша идея верна, просто замените кнопку для представления, которое содержит кнопку. Затем сделайте панель инструментов областью и добавьте представление "button" в область "toolbar".

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

[ModuleDependency("ServiceModule")]
public class ModuleA : IModule
{
    ...
}

public class ServiceModule : IModule
{
    ...
}
Другие вопросы по тегам