Должен ли я создавать отдельный Bootstrapper для каждого окна WPF?

Я новичок в WPF и Prism. Я хотел бы знать, должен ли я создавать новый загрузчик для каждого нового окна? Например, у меня есть «Window1», где я выбираю элемент из ListBox и нажимаю кнопку «ShowDetails», а в новом окне «Window2» я должен увидеть детали моего выбора. У меня есть окна и модули для них, но я хотел бы знать, как и где я могу зарегистрировать модуль "Module2" для "Window2"?

Пример моего Bootstrapper.

class Bootstrapper : UnityBootstrapper
{
    protected override DependencyObject CreateShell()
    {
        var mainWindow = new Window1();
        mainWindow.Show();
        return mainWindow;
    }

    protected override IModuleCatalog GetModuleCatalog()
    {
        var moduleCatalog = new ModuleCatalog();
        moduleCatalog.AddModule(typeof(Module1));

        return moduleCatalog;
    }
}

"App.xaml.cs"

public partial class App : Application
{
    public App()
    { 
        var bootstrapper = new Bootstrapper();
        bootstrapper.Run();
    }
}

person Sanya530    schedule 17.10.2012    source источник
comment
Начальный загрузчик - это все-в-одном шоу одного человека ... теоретически в приложении должен существовать только один. Там, где у вас moduleCatalog.AddModule(typeof(Module1));, должна быть и строка для модуля2   -  person KyorCode    schedule 17.10.2012
comment
Но как wpf узнает, что Module2 зарегистрирован для Window2? В Window1 у меня есть Region1, а в Window2 - Region2. При попытке прописать Module2 в загрузчике выдает ошибку Диспетчер регионов не содержит региона Region2.   -  person Sanya530    schedule 17.10.2012
comment
Могу ли я предложить вам начать использовать Caliburn.Micro, это намного проще, чем PRISM, и намного меньше регистрационных действий. - Чтобы в дальнейшем попытаться помочь вам и, насколько мне позволяют мои знания PRISM, вы должны зарегистрировать свой Region2, как я думал, в RegionManager   -  person KyorCode    schedule 17.10.2012
comment
codeproject.com/Articles/165370/ - это кажется довольно исчерпывающим   -  person KyorCode    schedule 17.10.2012


Ответы (1)


Bootstrapper обычно используется в классе запуска приложения WPF. Обычно это файл App.xaml.cs в стандартном шаблоне, который является классом кода программной части файла App.xaml. Вы переопределяете метод OnStartup, создаете экземпляр Bootstrapper и вызываете его метод запуска. Вы можете отложить запуск загрузчика до переопределения OnStartup вместо того, чтобы писать это в конструкторе класса App.xaml.cs. Затем вы будете использовать RegionManager в Prism и определять регионы в своем XAML. Если у вас несколько независимых Windows, это немного отличается от того, как Prism предназначена для использования. Существует концепция MainWindow или Shell, которую вы определяете в методе CreateShell класса Bootstrapper, который доступен в исходном коде Prism. Вместо этого создайте главное окно и определите области и, возможно, рассмотрите возможность создания механизма для отображения дополнительных окон в диалогах. Можно разделить MainWindow на несколько регионов и внедрить пользовательские элементы управления через RegionManager. Это делается с помощью метода активации диспетчера регионов.

Начните с чтения Руководства по шаблонам и практикам и, возможно, рассмотрите возможность просмотра видеороликов Майка Тоти о Prism. Первое видео здесь:

Prism и Silverlight: часть 1 - Использование набросков кода в Unity

В серии видеороликов есть много видеороликов (всего 10), которые помогут вам начать работу с PRISM.

Далее показан пример определения области в XAML:

<ItemsControl Regions:RegionManager.RegionName="MainRegion" />

Область PRISM может быть активирована, например. через DelegateCommand или ICommand, привязанный к кнопке, следующий код:

var viewA = new ViewA(); 
var regionA = (new RegionManager()).Regions["RegionA"]; 
regionA.Activate(viewA); 

Вам нужно будет определить несколько модулей, которые реализуют интерфейс IModule, и добавить их в свой ModuleCatalog, как вы уже сделали с ModuleA.

person Tore Aurstad    schedule 17.11.2012