今日はView-Modelを非同期で実装してみました。この記事を見つけました。その瞬間、想像していたほど簡単ではないと思いました...
なぜそれが機能するのか理解しています。しかし残念なことに、ビューモデルの設計時データを Blend でモックしたい場合 ( を使用してモックする場合SampleData.xaml
)、このコードを使用することはできません。Blend はこの方法で一般的なデータをモックすることを許可していないからです。そこで、次のようなリファクタリングを考えました。
public IEnumerable<MyModelType> Data { get { return _task.Result; } }
private NotifyTaskCompletion<IEnumerable<MyModelType>> _task;
を呼び出すData
代わりに、XAML から呼び出しTask.Result
ます。
WaitingForActivation
これですべてを再びモックできるようになりましたが、コードを実行すると、タスクにステータスがあったため、ほとんどの場合データを取得できませんでした。各詳細のメカニズムを理解していませんが、少しグーグルした後、async
/await
構文を使用する必要があることがわかりました。もちろん理にかなっていますが、 myData
はプロパティであり、 ではないため、これを行うことはできませんasync
。そして、それは私には意味がありません。
私の問題の回避策 (またはかなりの解決策) はありますか?
IsInDesignMode
(MVVM Light の一部)を使用して設計時のデータをモックする 2 つ目の方法があります。この 2 番目の嘲笑の方法についてどう思いますか? それは私の問題を解決しますか? このソリューションについて考えると、非常に奇妙な方法で動作すると思います。プログラムをコード全体でコンパイルし、このプロパティを false に設定する必要がありますが、条件は常にチェックされます。ではない?そうでない場合、実際にどのように機能しますか?