treeview.expandall方法在backgroundworker完成的事件WPF中不起作用

问题描述

在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();
}

数据获取工作正常,并且树视图的itemssource正常设置。 除了TreeView.ExpandAll()之外,其他所有功能都正常。

XAML代码

出现树视图的顶部节点,但基础项目未展开。我必须单击它们将其打开(效果很好)。知道为什么树视图没有扩展吗?我该怎么做才能使这项工作成功?

解决方法

TreeView.ExpandAll()可能需要从UI线程中调用。试试:

Application.Current.Dispatcher.Invoke(() => TreeView.ExpandAll());

假设不是从UI线程创建BackgroundWorker。如果这样的话,看来您的代码应该可以工作。