【问题标题】:mvvmlight windows 8 metro async load data in viewmodel constructormvvmlight windows 8 Metro异步加载视图模型构造函数中的数据
【发布时间】:2013-10-06 09:21:05
【问题描述】:

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

TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;

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

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

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

这里有人问过一个类似的问题: MVVM view model and async data initialisation

【问题讨论】:

标签: c# mvvm microsoft-metro winrt-async


【解决方案1】:

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

【讨论】:

  • 我认为你是对的,我不记得我在哪里看到在 LoadState 中加载数据是不好的做法。我正在使用 MVVM Light 框架,在示例代码/模板中,他在构造函数中加载数据。也许正是这让我提出了这个问题。
【解决方案2】:

首先,有几个规则:

  1. 确保等待所有Tasks
  2. 除事件处理程序外,切勿写 async void

已经解决了,请检查您是否还有一些错误。您可能已经遇到了一些错误,但还没有出现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2017-04-14
    • 2015-03-29
    • 2012-08-05
    相关资源
    最近更新 更多