0

在 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 代码:

<telerik:RadTreeView x:Name="TreeView" Horizo​​ntalContentAlignment="Stretch" VerticalContentAlignment="Stretch" SelectionMode="Single" ItemTemplate="{StaticResource OrderTemplate}" ItemsSource="{Binding Orders, Mode=OneWay}" SelectedItem="{绑定 SelectedItem,Mode=OneWayToSource}" telerik:TreeViewPanel.TreeVirtualizationMode="Recycling" >

树视图的顶部节点出现,但底层项目未展开。我必须单击它们打开(效果很好)。知道为什么树视图没有扩展吗?我能做些什么来完成这项工作?

4

1 回答 1

-1

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

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

这是假设 BackgroundWorker 不是从 UI 线程创建的。如果是这样,那么您的代码似乎应该可以工作。

于 2020-09-20T23:00:37.487 回答