1

これは簡単なことかもしれませんが、私たちはこれと格闘し続けています。

Silverlight と MVVM を使用しており、それぞれ 1 つのビューとビュー モデルを持つ 2 つの Silverlight クラス ライブラリがあるとします。

各ビューに他のビューに移動するボタンがある場合、循環参照を作成せずに他のビュー/ビュー モデルを表示するようにナビゲーションを設定するにはどうすればよいでしょうか?

4

1 に答える 1

0

MVVM を使用しているため、イベント アグリゲーターを使用するのが適切でした。各ビュー モデルは "NavigationRequested" イベントをトリガーでき、トップ レベルはそのイベントをリッスンし、それに応じてナビゲートする必要があります。簡単な例として:

private void Application_Startup(object sender, StartupEventArgs e)
{
    IEventPublisher publisher = new EventPublisher();

    var viewModel = new ViewModel(publisher);
    var view1 = new View1 { DataContext = viewModel };
    var view2 = new View2 { DataContext = viewModel };

    this.RootVisual = view1;
    view1.DataContext = viewModel;

    publisher.Get<NavigationRequested>()
        .ObserveOnDispatcher()
        .Select(item => item.ViewName)
        .Subscribe(name => RootVisual = name == "View1" ? view1 : view2);

    this.RootVisual = view1;
}

上記で使用している構文は、RX 拡張機能を使用するこのイベント アグリゲーターからのものですが、使用している MVVM フレームワークがある場合は、どの MVVM フレームワークに関係なく、同じ考え方が適用されることに注意してください。

于 2013-07-30T21:50:53.783 に答える