treeview.expandall 方法在 backgroundworker 完成事件 WPF 中不起作用
Posted
技术标签:
【中文标题】treeview.expandall 方法在 backgroundworker 完成事件 WPF 中不起作用【英文标题】:treeview.expandall method does not work from within backgroundworker finished event WPF 【发布时间】:2021-01-05 07:10:49 【问题描述】:在 WPF MVVM 解决方案中,我使用后台工作程序来显示繁忙的指示符,同时获取一些数据并填充(telerik)树视图。当我的(父)用户控件(持有 TreeView 和 RadBusyIndicator)被加载时,我正在尝试执行此操作:
private void UserControl_Loaded(object sender, RoutedEventArgs e)
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += (object sender_, DoWorkEventArgs e_) =>
GetData();
;
bg.RunWorkerCompleted += (object sender_, RunWorkerCompletedEventArgs e_) =>
TreeView.ExpandAll();
IsBusy = false;
;
IsBusy = true;
bg.RunWorkerAsync();
数据提取工作正常,树视图的项目源设置正常。
除了TreeView.ExpandAll()
,一切正常。
XAML 代码:
出现树视图的顶部节点,但未展开底层项目。我必须单击它们打开(效果很好)。知道为什么树视图没有扩展吗?我可以做些什么来完成这项工作?
【问题讨论】:
您不能从 UI 线程以外的任何线程创建、访问或更新任何 UI 元素。您需要向我们展示您的所有代码。 【参考方案1】:TreeView.ExpandAll() 可能需要从 UI 线程调用。试试:
Application.Current.Dispatcher.Invoke(() => TreeView.ExpandAll());
这是假设 BackgroundWorker 不是从 UI 线程创建的。如果是这样,那么您的代码似乎应该可以工作。
【讨论】:
以上是关于treeview.expandall 方法在 backgroundworker 完成事件 WPF 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章