今天,我尝试异步实现View-Model。我找到了this article。那一刻我觉得我想象不是那么容易......
我明白为什么会这样。但遗憾的是,当我想使用Blend模拟我的设计时数据时(使用SampleData.xaml
进行模拟),使用此代码是不可能的,因为Blend不允许以这种方式模拟通用数据。所以我想到了一些像这样的重构:
public IEnumerable<MyModelType> Data { get { return _task.Result; } }
private NotifyTaskCompletion<IEnumerable<MyModelType>> _task;
并从XAML调用Data
,而不是调用Task.Result
。
现在我可以再次模拟所有内容,但是当我运行代码时,我没有多次获取数据,因为任务具有WaitingForActivation
状态。我不了解每个细节的机制,但经过一些谷歌搜索后我得到了我应该使用async
/ await
语法。它当然有道理,但我无法做到这一点,因为我的Data
是一个属性,它不能是async
。它对我来说没有意义。
您对我的问题有任何解决方法(或漂亮的解决方案)吗?
使用IsInDesignMode
(MVVM Light的一部分)模拟设计时数据的第二种方法。你怎么看待第二种嘲弄方式?它能解决我的问题吗?当我考虑这个解决方案时,我认为它以如此奇怪的方式工作:它应该用整个代码编译我的程序并将此属性设置为false,但仍然总是检查条件。不是吗?如果没有,它是如何实际工作的?