プリズムにナビゲーションコントロールから動的にビューをロードするための最良の方法は何ですか
-
16-09-2019 - |
質問
私は、メニュー項目のクリックにEventAggregatorを使用してイベントをパブリッシュMenuコントロールを使用して自分のアプリケーションを介してナビゲーションを実装しました。以下に示すように何かのように、
this.eventAggregator.GetEvent<ViewRequestedEvent>()
.Publish(new BusinessObject.Model.MenuModel
{
Module = "Dashboard",
PresenterClass = "DashboardViewModel"
});
私のアプリケーション内のモジュールのほとんどは、このイベントに加入しています。彼らは、
モジュールに関連するイベントのみをサブスクライブするためにフィルタを使用しますthis.eventAggregator.GetEvent<ViewRequestedEvent>()
.Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Dashboard");
表示の要求は、次のように処理されます:
private void LoadRequestedView(MenuModel menuItem)
{
try
{
IDashboardViewModel viewModel = this.container.Resolve(Type.GetType(menuItem.PresenterClass)) as IDashboardViewModel;
this.regionManager.Regions["ViewRegion"].Add(viewModel.View);
this.regionManager.Regions["ViewRegion"].Activate(viewModel.View);
this.eventAggregator.GetEvent<ViewNotificationEvent>().Publish(menuItem.Description);
}
catch (ResolutionFailedException) { }
}
どのようにこの実装を評価しますか?あなたはそれを吸うと思うなら、私はそれを改善したり、より良い代替手段を示唆するのに役立ちます。
解決
私はあなたがこのモデルでの関心事の分離のための一定の欠如を持っていると思います。私は一般的にシェルへのプレゼンテーションを維持しようとします。私はこれを実装ウォルド方法については、この質問を参照してください。それは物事を単純化し、モジュールから離れRegionManagerのアイデアを抽象化します:
所属していません StackOverflow