Универсальное приложение Windows 10 — обновление ListView из фонового потока

У меня тут странная проблема. Мы разрабатываем универсальное приложение для Windows 10, и теперь я хочу обновить свой список, когда добавлю новое значение. Но, к сожалению, это не сработает, и я действительно не знаю, почему. Когда я добавляю новое значение, оно не будет обновлять мой список.

Данные поступают из фонового потока (REST-запрос к серверу), и поэтому я знаю, что должен использовать что-то, что запускает «добавочную функциональность» в UI-потоке.

Прежде всего я объявил IProgress и свою коллекцию:

private List<dtoGemeinde> _listeGemeinden = new List<dtoGemeinde>();


public List<dtoGemeinde> GemeindenCollection
{
            get { return this._listeGemeinden; }
}

IProgress<dtoGemeinde> prog;

prog = new Progress<dtoGemeinde>(UpdateListViewUI);

Это метод «UpdateListViewUI»:

 public void UpdateListViewUI(dtoGemeinde dto)
 {
           _listeGemeinden.Add(dto);

            this.listViewGemeinden.ItemsSource = GemeindenCollection;
 }

А это метод обратного вызова, который вызывается, когда завершается фоновый поток, загружающий данные с сервера:

 public async void onCallBackGemeinden(List<dtoGemeinde> listeGemeinden)
        {
            if (listeGemeinden != null && listeGemeinden.Count > 0)
            {
                this.progress.Visibility = Windows.UI.Xaml.Visibility.Collapsed;

                foreach (dtoGemeinde dto in listeGemeinden)
                {
                    await listViewGemeinden.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.High, () => prog.Report(dto));              
                }                          
            }
            else
            {
                await new MessageDialog("Data cant be load", "Error").ShowAsync();
            }
        }

person Maximus1809    schedule 26.06.2015    source источник
comment
Вы сталкиваетесь с какими-либо сообщениями об ошибках? Какова природа его неработоспособности?   -  person Mike Eason    schedule 26.06.2015
comment
Нет, сообщений об ошибках нет. Это означает, что я не могу видеть элементы списка.   -  person Maximus1809    schedule 26.06.2015
comment
Вы пробовали ObservableCollection или реализовали шаблон INotifyChanged, который может помочь, с ListView, использующим привязку данных к этому списку   -  person RoguePlanetoid    schedule 26.06.2015
comment
Спасибо RoguePlanetoid! ObservableCollection был решением! :)   -  person Maximus1809    schedule 29.06.2015
comment
Круто, рад, что помог, не был уверен, что это ответ, добавлю это к вашему вопросу   -  person RoguePlanetoid    schedule 29.06.2015


Ответы (1)


ObservableCollection вместо List обычно работает нормально, если нужно связать ListView и иметь возможность видеть обновления, если это не работает, любому базовому классу может потребоваться реализовать шаблон INotifyChanged для обновления любых свойств в коллекции, если это необходимо.

person RoguePlanetoid    schedule 29.06.2015