私はWPFアプリケーションでMVVMパターンを学習しようとしています。私は(私はHttpClientをを使用していますし、それは方法が非同期ですだから、それはasyncを指定する必要があります)私のviewmodelで、この非同期メソッドを書いた:viewmodelで非同期メソッドを呼び出す方法
public async Task<Dictionary<int, BusStop>> GetBusStops()
{
var busStopDict = new Dictionary<int, BusStop>();
var url = "my url";
using (HttpClient client = new HttpClient())
using (HttpResponseMessage response = await client.GetAsync(url))
using (HttpContent content = response.Content)
{
string data = await content.ReadAsStringAsync();
var regularExpression = Regex.Match(data, "\\[(.)*\\]");
var result = regularExpression.Groups[0];
var json = JValue.Parse(result.ToString());
var jsonArray = json.ToArray();
foreach (var a in jsonArray)
{
// irrelevant logic
busStopDict.Add(nr, bs);
}
}
return busStopDict;
}
この方法バス停(私のモデル)を充填した辞書を返します。私はビューをコンボボックスでこの辞書をバインドしたいと思いますが、私はviewmodelのコンストラクタでこの非同期メソッドを呼び出すことができないので、私はそれを動作させることができません。何か提案はありますか?
コンストラクタでメソッドを呼び出せないのはなぜですか? – Fruchtzwerg
コンストラクタを非同期にすることはできませんので、そのメソッドを待つことはできません。私がそのメソッドを待っていない場合は、Dictionary <> – r9s
の代わりにTask <>を返します。基本的なことは、この記事で詳しく説明しています。https://msdn.microsoft.com/en-us/雑誌/ dn630647.aspx私は以下の答えに従う代わりにそれを読むことを提案する。 – Evk