Windows 10 个通用应用程序 - 从后台线程更新 ListView
Windows 10 Universal App - ListView Update from Background Thread
我这里有一个奇怪的问题。我们开发了一个 Windows 10 通用应用程序,现在我想在添加新值时更新我的列表视图。但不幸的是它不起作用,我真的不知道为什么。当我添加新值时,它不会更新我的列表视图。
数据来自 background-thread(REST-Request 针对服务器)因此我知道,我应该使用在 UI-Thread 上运行 "add-functionality" 的东西。
首先我声明了一个 IProgress 和我的 collection:
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();
}
}
ObservableCollection 而不是 List 通常工作正常如果需要绑定 ListView 并能够看到更新,如果这不起作用任何底层 class 可能需要实施 INotifyChanged 模式来更新任何属性如果需要,在集合中。
我这里有一个奇怪的问题。我们开发了一个 Windows 10 通用应用程序,现在我想在添加新值时更新我的列表视图。但不幸的是它不起作用,我真的不知道为什么。当我添加新值时,它不会更新我的列表视图。
数据来自 background-thread(REST-Request 针对服务器)因此我知道,我应该使用在 UI-Thread 上运行 "add-functionality" 的东西。
首先我声明了一个 IProgress 和我的 collection:
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();
}
}
ObservableCollection 而不是 List 通常工作正常如果需要绑定 ListView 并能够看到更新,如果这不起作用任何底层 class 可能需要实施 INotifyChanged 模式来更新任何属性如果需要,在集合中。