Windows 10 Universal App - 从后台线程更新ListView

时间:2015-06-26 06:57:28

标签: wpf listview win-universal-app windows-10

我这里有一个奇怪的问题。我们开发了一个Windows 10通用应用程序,现在我想在添加新值时更新我的​​列表视图。但不幸的是它不会工作,我真的不知道为什么。当我添加新值时,它不会更新我的列表视图。

数据来自后台线程(针对服务器的REST请求),因此我知道,我应该使用在UI-Thread上运行“添加功能”的东西。

首先,我宣布了一个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();
            }
        }

1 个答案:

答案 0 :(得分:1)

ObservableCollection而不是List通常可以正常工作,如果需要绑定ListView并能够看到更新,如果这不起作用,任何底层类可能需要实现INotifyChanged模式以更新集合中的任何属性(如果需要)。