プリズムにナビゲーションコントロールから動的にビューをロードするための最良の方法は何ですか

StackOverflow https://stackoverflow.com/questions/1678423

  •  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のアイデアを抽象化します:

別名プリズムでCompositeWpfを<アプリケーションとモジュールの統合/>

scroll top