我在metro应用程序中使用MVVMLight框架。我开始在我的ViewModel构造函数中加载数据,一切正常。在构建结束时,我在app.xaml中引入了一些额外的异常处理。
TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
这开始在正在等待的任务中引发很多错误。
我将ViewModel构造函数数据加载调用移动到我的页面LoadState方法并在那里等待它们,一切正常。但是,我读过这可能是不好的做法。
我应该以某种方式向ViewModel构造函数引入异步调用吗?有兴趣做什么最好的实践?也许我应该删除异常处理程序!
这里有一个类似的问题: MVVM view model and async data initialisation
答案 0 :(得分:1)
不确定在哪里看到LoadState中的数据调用加载是一种不好的做法,在大多数情况下,您甚至无法在加载状态之前加载数据,因为您需要LoadState传递的任何参数。甚至连参数都不需要我个人更喜欢在LoadState中加载数据,因为在构造函数中开始加载它意味着你将在页面加载时占用一些cpu时间,所以它会占用页面更长的时间加载。我在构造函数中看到加载它的唯一原因是在设计时加载数据(因为视图模型cosntructor将被调用而不是LoadState)但是为此你可以添加一个条件(ViewModelBase.IsInDesignModeStatic
)在构造函数中调用load以设计时间
答案 1 :(得分:0)
首先,有几条规则:
Tasks
async void
。照顾,检查你是否还有一些错误。您可能已经遇到了一些错误,但它们没有浮出水面。