WPF ObservableCollection 不更新?

标签 wpf multithreading observablecollection

似乎无法更新 ObservableCollection。 TreeView 显示为空。
错误:这种类型的collectionview 不支持从与dispatcher 线程不同的线程对其sourcecollection 的更改。

类级别变量

public ObservableCollection<TSItem> tsItems { get; set; }

初始化组件
tsItems = new ObservableCollection<TSItem>();
bwRun.DoWork += bwRun_DoWork;
InitializeComponent();
tvTest.ItemsSource = tsItems;

从后台工作人员我使用以下方法添加到集合中
 private void AddTreeViewItem(TSItem item)
 {
     tsItems.Add(item);
 }

xml
<TreeView x:Name="tvTest" HorizontalAlignment="Left" Height="249" Margin="140,36,0,0" VerticalAlignment="Top" Width="257">
        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate>
                <StackPanel Orientation="Horizontal">
                    <Image Source="{Binding Icon}" />
                    <TextBlock Text="{Binding Header}" />
                </StackPanel>
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

最佳答案

您应该将更改发送到 UI 线程:

 private void AddTreeViewItem(TSItem item)
 {
    Dispatcher.BeginInvoke(new Action(() => tsItems.Add(item)));
 }

关于WPF ObservableCollection 不更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20330693/

相关文章:

wpf - 我怎样才能拥有一个所有字体粗细都相同的 WPF TextBlock?

c# - 基于具有删除按钮的数据类型的 Listview 项目

c# - 如何在代码隐藏中将 Unicode 字符设置为标签的内容?

python - 如何使用 Python 中的线程来并行化 AWS S3 API 调用?

windows - Delphi 从线程调用 shgetfileinfo 失败

c# - 如何选择将哪个 ObservableCollection 绑定(bind)到列表框?

c# - 上下文菜单中的命令绑定(bind)

windows - 双工命名管道在某个写入时挂起

c# - 绑定(bind)到派生集合的 ListView 未更新(XAML/Windows 8)

c# - 无法在 CollectionChanged 事件期间更改 ObservableCollection