2011-06-23 56 views

回答

0

我实现了INavigationAware接口,并在OnNavigatedFrom()方法中的navigationContext.NavigationService.Region.Context中设置了复杂对象。现在在下一页中,我再次实现了INavigationAware接口,现在我在OnNavigatedTo()中检查相同的值以获取值。

更新:我在另一个问题中发布了带有代码的答案。这里提到它的参考 -

首先获得来自INavigationAware接口视图模型 -

public class MyViewModel : INavigationAware 
{ ... 

然后就可以实现OnNavigatedFrom和设置要通过导航上下文如下对象 -

void INavigationAware.OnNavigatedFrom(NavigationContext navigationContext) 
{ 
    SharedData data = new SharedData(); 
    ... 
    navigationContext.NavigationService.Region.Context = data; 
} 

并且当您想要接收数据时,在第二个视图模型中添加以下一段代码 -

void INavigationAware.OnNavigatedTo(NavigationContext navigationContext) 
{ 
    if (navigationContext.NavigationService.Region.Context != null) 
    { 
       if (navigationContext.NavigationService.Region.Context is SharedData) 
       { 
        SharedData data = (SharedData)navigationContext.NavigationService.Region.Context; 
        ... 
       } 
    } 
} 

希望它可以帮助你!

0

“问你想要的东西”是统一的方式。您可以与任何其他统一对象共享注册为单例的对象。只需在viewmodels的构造函数中指定该共享对象的接口即可。

正如Dmitry Kushnier所提到的,您还可以通过EventAggregator将复杂类型作为参数传递。

+0

我打算使用navigationContext.NavigationService.Region.Context在页面之间设置一些数据模型。 – whihathac

+0

@whihathac:如果你只是想在视图之间分享它,那么这将起作用。如果您将控制器引入您的应用程序,您可能需要重新考虑:) –

+0

感谢您的反馈意见。我已经与MEF一起使用PRISM。介绍Unity的这种看起来像过度杀伤:) – whihathac