我的项目是基于MVVM构建的。目前我有一个列表,我可以选择一个对象并将其添加到另一个列表。我想要的是一个新窗口,其中显示此列表(包含已添加对象的列表)并在新窗口中编辑该列表(从该列表中删除项目)。
我应该如何将数据(选定对象)传递到另一个窗口并能够在那里更新?
我目前在一个视图中工作。在一些相关的问题中,他们建议MVVM灯,所以我试着寻找,从我的红色mvvm灯主要用来取代通知属性更改。我应该使用mvvm灯还是有一些我可以使用的特定模式?
两个窗口将同时打开。
答案 0 :(得分:1)
如果要在窗口之间共享ViewModel,可以使用ViewModelLocator
。它不是特定于MvvmLight,它只是为您创建一个项目模板。您可以自己实现它,它基本上是ViewModel的容器。您可以查看here了解实施细节。
答案 1 :(得分:1)
我必须说我不确定这些是最好的方法,如果它们很常见,那就是我和我的同事在WinRT应用程序中使用的方式,所以如果有人想出更好的东西(这些都不是那么干净的话),我会很高兴。
我可以想到两种传递数据的方法(不保留它)
在页面导航上传递参数
有共同的共享类(静态或单例类,可以从所有ViewModel访问一些公共数据)
传递导航:
我的导航服务类中有这个方法:
public virtual void NavigateTo(Type sourcePageType, object parameter)
{
((Frame)Window.Current.Content).Navigate(sourcePageType, parameter);
}
我在导航命令中使用它:
Navigation.NavigateTo(typeof(PageType), someParameters);
然后你可以在导航页面后面的代码中获取值
protected override void OnNavigatedTo(NavigationEventArgs e)
{
var receivedParameter = e.Parameter as TheTypeOfThePassedParameter;
}
从那里将它们传递给ViewModel,也许有一个选项可以在代码中没有代码的情况下传递它,但我还没有尝试过。
共享课程:
只要有静态类或带有所需字段的单例,这非常简单。