3

私は Caliburn.Micro をいじっていて、今はとてもシンプルなアプリケーションを持っています。

これには AppView があり、実際には NavigationBar、InnerView、および StatusBar の ContentControl があります。

ここで、異なる内部ビュー間のナビゲーションを処理したいと考えています。

現在、eventaggregator を使用して NavigationEvent を公開しています。これにより、メインウィンドウのインナービューが別のビューに切り替えられます。

これがPublishへの呼び出しです(すべてのInnerViewには、IEventAggregatorを持つ同じ基本クラスがあります)

public void NavigateOverview()
{
    base._eventAggregator.Publish(new NavigateEvent("OverviewViewModel"));
}

現在、NavigateEvent を処理する AppViewModel に文字列を渡しています。

        public void Handle(NavigateEvent navigate)
        {
            InnerViewModel target;

            switch (navigate.TargetViewModel)
            {
                case "SelectProjectViewModel":
                {
                    target = new SelectProjectViewModel(_eventAggregator);
                    break;
                }
                case "OverviewViewModel":
                {
                    target = new OverviewViewModel(_eventAggregator);
                    break;
                }
                default:
                {
                    throw new InvalidOperationException("no target type found");
                }
            }

            this.CurrentInnerViewModel = target;
        }

文字列を渡すことは機能しますが、エラーが発生しやすく、あまりきれいではありません。

それを処理するカリバーンの方法は何ですか?それがコンダクターのするべきことですか?

4

1 に答える 1