2014-01-27 5 views
0

Я новичок в асинхронном программировании. Я создаю приложение WP8.Индикатор выполнения с WP8 (MVVM) и асинхронный веб-сервис

То, что я хотел бы иметь

Я хотел бы показать список, например, Новости. При нажатии кнопки прослушиваются:

  1. должен появиться proggress индикатора,
  2. данные должны быть загружены и отображены,
  3. индикатор прогресса должен ив.

То, что я до сих пор:

метод в ссылочного WebService:

void GetNewsAsync() 
{ 
    //... 
} 

Два метода в ViewModel:

public void GetNewsFromService() 
{ 
    //call webservice 
    //... 
    client.GetNewsCompleted += client_GetNewsCompleted; 
    client.GetNewsAsync(startDate); 
} 

void client_GetNewsCompleted(object sender, GetNewsCompletedEventArgs e) 
{ 
//save result from webservice to db 
//update viewmodel property 
//... 
} 

метод OnClick в представлении для кнопка «sync»:

void appBarSyncButton_Click(object sender, EventArgs e) 
{ 
    TurnOnProgressBar(); 
    _viewModel.GetNewsFromService(); 
    //TurnOffProgressBar(); 
} 

Все работает (веб-сервис называется, результат сохранения данных, список обновляется, но ...

Как переделать этот код, чтобы сообщить мнение для того, чтобы скрыть прогресс индикатор (когда все работы завершены)?

ответ

0

client_GetNewsCompleted следует присвоить общественному достоянию, как Completed, true. После этого было бы больше MVVM, если бы у вас было свойство IsInProgress, которым вы полностью управляете в ViewModel, - установите значение true в GetNewsFromService и false в client_GetNewsCompleted. Затем просто привяжите ProgressIndicator.Visibility к этому свойству (используя конвертер).

+0

lisp имеет очень хорошее решение, я всегда использую базовый класс для всех своих ViewModels, для которых для этого есть свойство IsBusy (bool). При необходимости просто установите значение true или false, и ваш View может использовать это для переключения видимости – Depechie

Смежные вопросы