我有这样的功能:
public void UpdateList()
{
BindList = Model.GetList();
TreeView1.ItemsSource = BindList;
}
每次用户执行某些操作时,都需要调用UpdateList()(并因此重新加载树视图列表)。它目前有效,它只是非常慢,所以我想在另一个线程中进行。
我是WPF的新手...在WinForms程序中我曾经做过委托并检查是否有InvokeRequired等。但我发现这在WPF中不起作用。
因此,如果我想调用UpdateList()使其在另一个线程中运行,而ItemsSource从另一个线程更新,我应该怎么做?
由于
答案 0 :(得分:1)
将Model.GetList()
函数更改为ObservableCollection<>
类型的属性例如:
public ObservableCollection<DataItem> List { get; set; }
只调用TreeView1.ItemsSource = Model.List
一次。它为您提供了WPF绑定的优势。
创建BackgroundWorker以在DoWork
处理程序中加载数据。将数据加载到临时集合,并将此集合复制到Model.List
处理程序的RunWorkerCompleted
如果您想在加载数据时更新树,可以查看以下方法:WPF update binding in a background thread
阅读并学习MVVM pattern以了解WPF开发的主要思路