Призма с передачей сущности в модал для модального вида - PullRequest
2 голосов
/ 02 сентября 2010

Я использую шаблон MVVM с платформой Prism 2.0 и WPF.Я столкнулся с проблемой модального окна и инициализации ViewModel с помощью событий.В моем модуле у меня есть некоторый код, который создает объект, который я затем хочу передать в мой ViewModel, чтобы представление могло привязываться к его свойствам.

Обычно я бы использовал EventAggregator для публикации события, содержащего мойобъект, на который можно подписаться в ViewModel.Однако в этом сценарии я создаю новое модальное окно, и, следовательно, ViewModel не создается вовремя, чтобы подписаться на событие, прежде чем я смогу его опубликовать.Я пытаюсь избежать передачи объекта в Window как DataContext или возврата к другим механизмам.У кого-нибудь есть решение, чтобы заставить это работать?Может быть, какой-нибудь способ заставить View загружаться перед вызовом ShowDialog или Show?

    var popup= new PopUpWindow();
    regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
    eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
    // ViewModel only created and subscribes to event when the line below is run
    popup.ShowDialog();

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

    var popup= new PopUpWindow();
    regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
    popup.Show();
    popup.Hide();
    eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
    popup.ShowDialog();

Хорошо, может быть, я понял это, кажется, работает по крайней мере ...

    var popup= new PopUpWindow();
    regionManager.RegisterViewWithRegion("MyRegion", typeof(MyView));
    RegionManager.SetRegionManager(popup, regionManager);
    regionManager.AddToRegion("MyRegion", typeof(MyView));
    eventAggregator.GetEvent<NotifyObjectEvent>().Publish(myObject);
    popup.ShowDialog();

1 Ответ

2 голосов
/ 20 сентября 2010

Вы можете использовать что-то похожее на кэшированный агрегатор событий Аде Миллер.Эта ссылка с '08, но она все еще должна быть полезной: http://www.ademiller.com/blogs/tech/2008/11/adding-store-and-forward-support-to-the-prism-eventaggregator/

Идея состоит в том, чтобы опубликовать событие и, если нет подписчиков, сохранять его до появления первого подписчика.1005 * Надеюсь, это поможет.

Спасибо, Дамиан

...