したがって、私はwp7用のアプリケーションを作っています。それをシンプルに保つために 、これらは私のファイルは、以下のとおりです。Wp7、C#viewModelでダウンロードが完了したらナビゲート
- LoginPage.xaml(starupページ)
- MainPage.xamlを
- MainViewModel.cs
- ItemViewModel.cs
では、 MainViewModel.cs私はfolowing関数を含んでいた:
private void DownloadItems()
{
string key = this.User.Key;
WebClient wc = new WebClient();
wc.DownloadStringCompleted += callback;
wc.DownloadStringAsync(new Uri("http://localhost/items?key=" + key)); //JSON
}
とコールバック関数:ログインユーザがログインが処理され、すべてがOKの場合DownloadItemsがたて設定User.Keyを使用していると呼ばれる
private void callback(object sender, DownloadStringCompletedEventArgs e)
{
if (e.Error == null)
{
List<ItemViewModel> col = Deserialize_ItemViewModel(e.Result); // deserialize JSON to List<ItemViewModel>
this.Items = new ObservableCollection<ItemViewModel>(col);
ItemDB.Sponsors.InsertAllOnSubmit(col);
ItemDB.SubmitChanges();
this.IsDataLoaded = true;
// ???
}
}
。
私が必要とするのは、ダウンロード中にProgressIndicatorを表示することです。ダウンロードが完了して処理されると、その時点までに準備が整うMainPage.xamlに移動します。
私は誰でも助けてくれることを祈っています。ありがとうございました!
私のアプリではうまくいくと思いますが、私のビューモデルから非静的関数(ナビゲーション関数)を呼び出すことができるのか、この変数が更新されたのか分かりますか? – Qurben
バックグラウンドスレッドからUIスレッドを呼び出す方法については、Pavanによる他の回答を参照してください。しかし、私があなたのために提供したソリューションを使用するなら、あなたが必要とは思わない。 –
@Qurben、あなたはビューモデルでそれを行うべきではありません。つまり、ナビゲーション機能を呼び出すべきです。ビューモデルはナビゲーションとは関係ありません。ビューのモデルです。 viewmodelは、変更されたプロパティに通知するだけで、何かが周囲に変化したことを通知し、その変更に応じて周囲に影響を及ぼします。最良のフローはおそらく次のとおりです。ページに移動し、データがロードされるまで一時的な表示を表示します。データがロードされると、予想されるビューが表示されます。 –