如何在Silverlight 4 + PRISM中的页面之间传递复杂对象

时间:2011-06-23 19:57:06

标签: silverlight mvvm navigation prism

我在我的应用程序中使用Silverlight 4 + PRISM + MVVM。我想将一个复杂的对象传递给另一个页面。我不知道该怎么做。我不能/不想使用URI参数。

3 个答案:

答案 0 :(得分:0)

也许EventAggreagtor会很有用

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

更新:我在另一个问题中发布了代码回答。在此提及以供参考 -

首先从INavigationAware接口派生viewmodel -

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;
                    ...
                }
    }
}

希望它能帮到你们所有人!