Ура. Поборол ложное срабатывание SelectionChanged в Pivot ListBox. Детали ниже:
Обработчик события нажития на ListBox:
private void ServicesListBox_SelectionChanged (object sender, SelectionChangedEventArgs e)
{
if (!App.ViewModel.IsAllServicesLoaded)
{
this.ServicesListBox.SelectedIndex = -1;
return;
}
if (ServicesListBox.SelectedItem != null)
{
Service selectedService = (Service)ServicesListBox.SelectedItem;
string hostName = selectedService.HostName;
string serviceDescription = selectedService.ServiceDescription;
this.ServicesListBox.SelectedIndex = -1;
NavigationService.Navigate(new Uri("/ServicePage.xaml?HostName="+hostName+"&ServiceDescription="+serviceDescription, UriKind.Relative));
}
else
{
return;
}
}
App.ViewModel.IsAllServicesLoaded - это true если завершилась загрузка и сериализация списка класса Service:
Сами вызовы суть тупо затычки с присваиваниями:
public bool IsAllServicesLoaded
{
get;
private set;
}
public void AllServicesLoaded()
{
this.IsAllServicesLoaded = true;
}
public void AllServicesLoaded_Disable()
{
this.IsAllServicesLoaded = false;
}
Загрузка списка отправляется в фон:
public void LoadServices()
{
AppSettings settings = new AppSettings();
Uri uri = new Uri((string)settings.URLwpNagSetting + "?cmd=3"); // , UriKind.Relative);
WebClient webClient = new WebClient();
webClient.Credentials = new NetworkCredential((string)settings.UserNameSetting, (string)settings.UserPasswordSetting);
webClient.DownloadStringCompleted += OnDownloadServicesCompleted;
webClient.DownloadStringAsync(uri);
}
По окончинии загрузки 1) ставим false флагу для предотвращения срабатывания SelectionChanged 2) десериализуем для обновления привязки 3) врубаем true для флага и разрешаем таким образом обработку события SelectionChanged:
void OnDownloadServicesCompleted(object sender, DownloadStringCompletedEventArgs args)
{
AllServicesLoaded_Disable();
StringReader reader = new StringReader(args.Result);
XmlSerializer xml = new XmlSerializer(typeof(ServiceBody));
ServiceBody = xml.Deserialize(reader) as ServiceBody;
AllServicesLoaded();
}
Помогла ссылка на stackoverflow:
http://stackoverflow.com/questions/7679586/listbox-selectionchanged-firing-when-setting-to-1-within-function-wp7
Немає коментарів:
Дописати коментар