我在我的应用程序中使用Silverlight 4 + PRISM + MVVM。我想将一个复杂的对象传递给另一个页面。我不知道该怎么做。我不能/不想使用URI参数。
答案 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;
...
}
}
}
希望它能帮到你们所有人!