1

我在 Metro 应用程序中使用 MVVMLight 框架。我首先在 ViewModel 构造函数中加载数据,一切正常。在构建结束时,我在 app.xaml 中引入了一些额外的异常处理。

TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;

这开始引发很多关于未正确等待任务的错误。

我将 ViewModel 构造函数数据加载调用移动到我的页面 LoadState 方法中,并在那里等待它们,一切正常。但是,我读过这可能是不好的做法。

我应该以某种方式引入对 ViewModel 构造函数的异步调用吗?有兴趣最好的做法是什么?也许我应该删除异常处理程序!

此处提出了类似的问题: MVVM view model and async data initialisation

4

2 回答 2

1

不确定您在哪里看到 LoadState 中的数据调用加载是一种不好的做法,在大多数情况下,您甚至无法在加载状态之前加载数据,因为您需要 LoadState 传递的任何参数。甚至不需要参数我个人更喜欢在 LoadState 中加载数据,因为在构造函数中开始加载它意味着您将在页面加载时花费一些 cpu 时间,因此页面将花费更长的时间加载。我看到在构造函数中加载它的唯一原因是在设计时加载数据(因为将调用视图模型构造函数而不是 LoadState),但为此您可以添加一个条件(ViewModelBase.IsInDesignModeStatic)来调用加载设计时的构造函数

于 2013-10-08T20:40:57.733 回答
0

首先,有几个规则:

  1. 确保一切Tasks都在等待
  2. async void除事件处理程序外,切勿编写。

处理好了,检查你是否还有一些错误。您可能已经遇到了一些错误,但还没有出现。

于 2013-10-07T13:00:00.320 回答