多个项目之间的Silverlight导航

时间:2013-07-30 20:18:41

标签: silverlight

这可能很简单但我们仍然在努力解决这个问题。

我们正在使用Silverlight和MVVM,假设我们有两个silverlight类库,每个库都有一个视图和视图模型。

如果我们在每个视图上都有一个按钮,表示转到另一个视图,我们如何设置导航以显示其他视图/视图模型而不创建循环引用?

1 个答案:

答案 0 :(得分: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;
}

请注意,我上面使用的语法来自this event aggregator that uses the RX extensions,但无论您使用哪种MVVM框架(如果有的话),都应该使用相同的想法。

相关问题