Обновление TreeView ItemsSource в другом потоке
У меня есть такая функция:
public void UpdateList()
{
BindList = Model.GetList();
TreeView1.ItemsSource = BindList;
}
UpdateList() необходимо вызывать (и, следовательно, перезагружать список дерева) каждый раз, когда пользователь выполняет какое-либо действие. В настоящее время это работает, просто очень медленно, поэтому я хочу сделать это в другом потоке.
Я довольно новичок в WPF... в программах WinForms, которые я использовал для создания делегатов и проверки InvokeRequired и т. Д. Но я обнаружил, что это не работает в WPF.
Поэтому, если я хочу вызвать UpdateList() таким образом, чтобы он выполнялся в другом потоке, а ItemsSource обновлялся из этого другого потока, как мне это сделать?
Спасибо
1 ответ
+ Изменить
Model.GetList()
функция к свойству типаObservableCollection<>
Например:public ObservableCollection<DataItem> List { get; set; }
Вызов
TreeView1.ItemsSource = Model.List
только однажды. Это дает вам преимущества привязки WPF.Создайте BackgroundWorker для загрузки данных в
DoWork
обработчик. Загрузить данные во временную коллекцию и скопировать эту коллекцию вModel.List
вRunWorkerCompleted
обработчик.
Если вы хотите обновить дерево во время загрузки данных, вы можете посмотреть на этот подход: привязка обновления WPF в фоновом потокеПрочитайте и изучите шаблон MVVM, чтобы понять основную идею разработки WPF