그래서 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
}
및 콜백 기능 :
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;
// ???
}
}
로그인에서 사용자 로그를 처리하고 모든 확인 DownloadItems가 새롭게 설정 User.Key을 사용하고있는 호출 될 때합니다.
내가 필요한 것은 다운로드가 진행되는 동안 ProgressIndicator를 표시하고 다운로드가 완료되어 처리되면 해당 시간까지 준비 될 MainPage.xaml로 이동하려고합니다.
누구든지 저를 도울 수 있기를 바랍니다. 미리 감사드립니다!
내 응용 프로그램에서 작동 할 것이라고 생각하지만 내 viewmodel에서 비 정적 기능 (탐색 기능)을 호출 할 수 있는지 또는이 변수가 업데이트 될 때 알 수 있습니까? – Qurben
배경 스레드에서 UI 스레드를 호출하는 방법은 Pavan의 다른 답변을 참조하십시오. 그러나 내가 제공 한 솔루션을 사용하면 필요 없다고 생각합니다. –
@Qurben, 당신은 viewmodel에서, 즉 탐색 기능을 호출해서는 안됩니다. 뷰 모델은 탐색과 관련이 없으며 뷰의 모델입니다. 뷰 모델은 변경된 속성에 플래그를 지정하여 무언가가 주변으로 변경되었다는 것을 알려주고 해당 변경 사항을 처리하는 것은 주변 환경에 달려 있습니다. 최상의 플로우는 아마도 다음과 같습니다. 페이지로 이동하여 데이터가로드 될 때까지 임시보기를 표시하십시오. 데이터가로드되면 예상보기가 표시됩니다. –