【问题标题】:Silverlight Navigation Between Multiple Projects多个项目之间的 Silverlight 导航
【发布时间】:2013-07-30 20:18:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: silverlight


    【解决方案1】:

    由于您使用的是 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 框架(如果有的话),同样的想法都应该适用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-03
      • 2022-11-23
      • 1970-01-01
      相关资源
      最近更新 更多