在另一个线程中更新TreeView ItemsSource

时间:2012-03-31 14:36:30

标签: wpf multithreading treeview itemssource

我有这样的功能:

public void UpdateList()
{
BindList = Model.GetList();
TreeView1.ItemsSource = BindList;
}
每次用户执行某些操作时,都需要调用UpdateList()(并因此重新加载树视图列表)。它目前有效,它只是非常慢,所以我想在另一个线程中进行。

我是WPF的新手...在WinForms程序中我曾经做过委托并检查是否有InvokeRequired等。但我发现这在WPF中不起作用。

因此,如果我想调用UpdateList()使其在另一个线程中运行,而ItemsSource从另一个线程更新,我应该怎么做?

由于

1 个答案:

答案 0 :(得分:1)

  1. Model.GetList()函数更改为ObservableCollection<>类型的属性例如:

    public ObservableCollection<DataItem> List { get; set; }

  2. 只调用TreeView1.ItemsSource = Model.List一次。它为您提供了WPF绑定的优势。

  3. 创建BackgroundWorker以在DoWork处理程序中加载数据。将数据加载到临时集合,并将此集合复制到Model.List处理程序的RunWorkerCompleted 如果您想在加载数据时更新树,可以查看以下方法:WPF update binding in a background thread

  4. 阅读并学习MVVM pattern以了解WPF开发的主要思路