###前提・実現したいこと
(文章では伝わらないかもしれませんが)以下のようなコードで掲題の件を実現したいと考えました。
※prismの利用を前提としたコードです。
###該当のソースコード
csharp
1// model 2public class Item 3{ 4 public string ID => Guid.NewGuid().ToString(); 5} 6 7public class DataStore 8{ 9 public async Task<IEnumerable<Item>> GetItemsAsync() 10 { 11 // 取得に時間がかかる想定 12 await Task.Delay(TimeSpan.FromSeconds(5)); 13 return Enumerable.Range(1, 10).Select(_ => new Item()); 14 } 15} 16 17// viewmodel 18public class ListViewTestPageViewModel : BindableBase 19{ 20 private readonly DataStore store; 21 22 // view側にバインドするコレクション 23 public ObservableCollection<Item> Items { get; private set; } 24 25 public ListViewTestPageViewModel() 26 { 27 store = new DataStore(); 28 29 // ここでItemsを初期化したいけどコンストラクタ内でawaitできないため初期化できない 30 //await store.GetItemsAsync(); 31 } 32} 33
###発生している問題・エラーメッセージ
上記ListViewTestPageViewModel
内のコンストラクタ内で、ViewにバインドするItems
の初期値を設定したいと考えているのですが、コンストラクタ内では非同期メソッドをawaitできないため利用できないという認識です。
この場合、どのようなアプローチでItems
を初期化するのが正しいのでしょうか。
(初心者のため見当違いのことを書いていたら申し訳ありません、ご指摘いただけるとうれしいです)
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/11/29 05:27