Использование Prism для навигации в приложении Wpf - PullRequest
4 голосов
/ 10 сентября 2009

Я начинаю новый проект в Wpf и сейчас изучаю использование Prism. Сейчас я просто пытаюсь настроить навигацию приложения с помощью Prism. К сожалению, отсутствие у меня опыта работы с фреймворком затрудняет начало работы.

Чтобы быть более точным в моей первой задаче, у меня есть приложение с областью «навигация / меню» и «основной» областью. Регион навигации будет одинаковым для всех видов основного региона, и поэтому я определяю меню в shell.xaml. При нажатии на любой пункт меню я бы хотел добавить вид в регион с помощью Prism. Первый; это то, для чего обычно используется Prism? Если так; какой типичный подход? И я имею в виду на более структурном уровне ..

У меня сложилось впечатление, что Prism в конечном итоге сделает мое приложение гораздо более масштабируемым, и я вижу, что получаю от него некоторые другие преимущества - например, контейнер IoC. Поэтому я хотел бы использовать его - если бы я только мог пройти через первые шаги ..

Ответы [ 2 ]

4 голосов
/ 10 сентября 2009

У меня есть пример, который использует немного больше ощущения CAG для модулей, вносящих вклад в меню и как добавить представления в регион. Это должно прояснить ситуацию.

http://dl.getdropbox.com/u/376992/CAGMenus.zip

Надеюсь, это поможет, Anderson

3 голосов
/ 10 сентября 2009

Bumbuska,

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

Я сделаю это, добавив прослушиватели событий в событие запуска вашего основного региона. Когда вы выбираете свой пункт в меню, вы запускаете событие. Когда это произойдет, ваш основной регион обработает событие, и вы очистите текущий вид из основного региона. Затем создайте новый вид, который вы хотите использовать, и добавьте его.

Ваш основной регион должен выглядеть примерно так:

public void Initialize()
{
    Events.PageEvents.ClickedEvent1 ce1 = this.eventAggregator.GetEvent<Events.PageEvents.ClickedEvent1>();
    ce1.Subscribe(LoadView, ThreadOption.UIThread, true);
}

private void LoadView(Events.HomePageEvents.Clicked clicked1)
{
    IRegion mainRegion = RegionManager.Regions["MainRegion"];
    foreach (object view in new List<object>mainRegion.Views))
    {
        RegionManager.Regions["MainRegion"].Remove(view);
    }

    IModule firstModule = Container.Resolve<Modules.FirstModule>();
    firstModuleModules.Initialize();

}

Я надеюсь, что это указывает на правильное направление. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.

...