MVVM Light:我在哪里从模型中实例化一个类,如何更新/访问它?

时间:2011-01-31 17:28:34

标签: windows-phone-7 navigation viewmodel mvvm-light

现在,我正在研究我的第一个WP7应用程序并遇到了一些问题,尽管我在网上找到了我能找到的内容,但我仍无法回答这些问题。请考虑具有主页面,参数页面和结果页面的应用程序。在参数页面中,用户可以在各种文本框中输入或更新数字。点击后退按钮会将用户带回主页面,其中有一个名为“计算”的按钮。点击该按钮应该获取数据,使用它执行计算并将用户带到结果页面,显示带有结果的网格。

在一个名为Calculator.cs的文件中,我在名为Models的文件夹中有一个名为Calculator的类。我还在ViewModels文件夹和相应的MainPage.xaml中有我的MainViewModel.cs,ParametersViewModel.cs和ResultsViewModel.cs文件,以及名为Views的文件夹中的Parameters.xaml和Results.xaml。我假设所有数据都将在Calculator类的实例中被操作,然后返回结果集并将其定向到Results.xaml。我只是不知道在哪里实例化Calculator类,传递数据,然后检索结果。我也有些困惑,在计算完成后我将如何触发自动导航到结果页面。

对此的任何帮助将不胜感激。

更新:Passing a complex object to a page while navigating in a WP7 Silverlight application有关于同一主题的更多信息。我可以进入App.xaml.cs并添加如下内容:

public class Foobar
{
    public string barfoo = "hah!";
}

public static Foobar myfoob = new Foobar();

然后从ViewModel页面访问它,例如AboutViewModel.cs,像这样:

public AboutViewModel()
{
    string goo = App.myfoob.barfoo;
}

但在这一点上,我仍然不确定可能产生的不可预见的影响。我将在这一点上解决序列化/逻辑删除问题,看看这种方法或跨页面使用相同的DataContext会发生什么。否则,上面链接中的一个海报提到序列化params并在页面之间传递它们。我担心的是,HTTP GET是否存在字符限制。似乎有:URI Limits in Silverlight

1 个答案:

答案 0 :(得分:1)

当然有很多可能的设计 - 其中很多都是以不同的方式正确的!

这是我可能会使用的一个:

  • 按下计算按钮应触发导航到结果页面
  • 在导航到时,“结果”页面应显示一些动画(可能只是一个进度条)
  • 导航到,“结果”页面应创建一个新的ResultsViewModel,并将MainViewModel作为参数传递
  • ResultsViewModel的构造函数(或某些init方法)应该引发一个线程来进行计算
  • 此计算完成后,ResultsViewModel的相关属性将设置
  • 此时,“结果”页面上的数据绑定将清除动画并显示结果

其他解决方案绝对可用 - 有兴趣阅读其他人建议和喜欢的内容。

顺便说一下,在结果页面上需要注意的一件事是墓碑 - 这可能是一个有趣的挑战!