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 和 RadBusyIndi​​cator)被加载时,我正在尝试执行此操作:

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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

以树形显示的窗体界面

C# treeview 使用笔记

winform menuStrip 保持展开

Uniapp 应用开机自启插件 Ba-Autoboot

uniapp pdf阅读插件 Ba-Pdf

为啥电脑会运行0xc00000ba程序失败