サービスを必要とするコンストラクターを持つビュー モデルがあります。ビューをビューモデルに接続するためにサービスロケーターを使用するGalaSoftのMvvmLightを使用しています。
SimpleIOC は、ビューモデル コンストラクターへのサービスの提供を適切に処理しますが、ビューモデルにデータ ソースからのデータを入力する必要があります。私のビューモデルは次のようになります:-
public class MainPageViewModel : ViewModelBase
{
private readonly GroupService _groupService;
private readonly GroupFactory _groupFactory;
private readonly ObservableCollection<GroupVM> _groupVms = new ObservableCollection<GroupVM>();
public MainPageViewModel(Domain.Services.GroupService groupService, VMFactories.GroupFactory groupFactory)
{
_groupService = groupService;
_groupFactory = groupFactory;
}
public async Task Init()
{
var groups = await _groupService.LoadGroups();
foreach (var group in groups)
{
GroupVms.Add(_groupFactory.Create(group));
}
}
public ObservableCollection<GroupVM> GroupVms { get { return _groupVms; } }
}
どういうわけか、init メソッドを awaited と呼ぶ必要がありますが、これを行う最善の方法がわかりません。私は3つのオプションを考えることができます:-
- コンストラクターで Init を呼び出すだけですが、待機しません (これは本当に悪い習慣です)。
- ViewModelLocator オブジェクトで Init を呼び出しますが、タスクを返すことができないため、再び init を待つことができません
- ビューの読み込み時に、DataContext をある種の IAsyncViewmodel にキャストし、init メソッドを待ちます。
以前の Windows 8 ストア プロジェクトでオプション 3 を使用しましたが、それは間違っているように感じます。アドバイスをいただければ幸いです。
ありがとう
ロス