使用相同的视图模型不同的窗口

本文关键字:窗口 模型 视图 | 更新日期: 2023-09-27 18:20:45

我的项目是在MVVM上构建的。目前我有一个列表,我可以在其中选择一个对象并将它们添加到另一个列表中。我想创建一个新窗口,在其中显示该列表(添加了对象的列表),并在新窗口中编辑该列表(从该列表中删除一个项目)。

我应该如何将数据(选定的对象)传递到另一个窗口并能够在那里更新它们?

我目前在一个视图中工作。在一些相关的问题中,他们建议MVVM light,所以我尝试寻找它,从我的角度来看,MVVM light主要用于替换notify属性更改。我应该使用mvvm灯还是有一些特定的模式可以使用?

两个窗口将同时打开。

使用相同的视图模型不同的窗口

如果要在窗口之间共享ViewModel,可以使用ViewModelLocator。它并不是MvvmLight特有的,它只是用它的项目模板为您创建一个。您可以自己实现它,它基本上是ViewModels的容器。您可以在这里查看实现的详细信息。

我不得不说,我不确定这些是否是最好的方法,如果它们很常见,那正是我和我的同事在WinRT应用程序中使用的方法,所以如果有人能想出更好的方法,我会非常高兴(这两种方法都不那么干净)。

我可以想出两种方法来传递数据(而不持久化)

  1. 在页面导航上传递参数

  2. 具有公共共享类(静态或单例类,具有可从所有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,也许可以选择在代码后面没有代码的情况下传递,但我还没有尝试过。

共享类:

这非常简单,只需要有一个静态类或一个带有所需字段的singleton。