”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何从 WPF 中的非调度程序线程修改 ObservableCollection?

如何从 WPF 中的非调度程序线程修改 ObservableCollection?

发布于2024-11-08
浏览:360

How to Modify an ObservableCollection From a Non-Dispatcher Thread in WPF?

“这种类型的 CollectionView 不支持从与调度程序线程不同的线程更改其 SourceCollection”

问题描述

A DataGrid 绑定异步填充的 ObservableCollection 会抛出错误,指出不允许从非 Dispatcher 线程对 SourceCollection 进行更改。

解决方案

问题是由线程关联引起的。 ObservableCollection 最初是在 UI 线程上创建的,因此只能从 UI 线程访问它。要从不同的线程修改它,必须将委托放置在 UI Dispatcher 上。

更新了 ViewModel 代码

public void Load()
{
    matchList = new List();
    matchList = proxy.GetMatch().ToList();

    foreach (EfesBet.DataContract.GetMatchDetailsDC match in matchList)
    {
        App.Current.Dispatcher.Invoke((Action)delegate
        {
            _matchObsCollection.Add(match);
        });
    }
}

通过调用 UI Dispatcher 上的委托,在 UI 线程上安排对 ObservableCollection 的添加,从而解决异常。

增强的绑定和刷新

用于异步绑定和刷新 DataGrid,请考虑在 ViewModel 属性上使用 INotifyPropertyChanged 并调用 Dispatcher 来刷新 UI 元素。

最新教程 更多>
  • 如何从原始列表中每第 N 个项目生成一个新列表?
    如何从原始列表中每第 N 个项目生成一个新列表?
    用原始列表中的每 N 个项目创建一个列表在数据分析或编程中,通常需要使用一个清单。一项常见任务是创建一个仅包含原始列表中每第 N 个项目的新列表。例如,给定一个从 0 到 1000 的整数列表,我们如何获得一个仅包含第一个和后续第 10 个项目的列表?使用传统的 for 循环,我们可以按如下方式完成...
    编程 发布于2024-11-08
  • 将通过 Kalp API Gateway 生成的 API 端点与您的前端应用程序集成
    将通过 Kalp API Gateway 生成的 API 端点与您的前端应用程序集成
    Introduction Hello, readers; congratulations on making it to the final part of this tutorial series. Now that you have learnt how to create a...
    编程 发布于2024-11-08
  • 反应虚拟 DOM
    反应虚拟 DOM
    Introduction Hi, Gleb Kotovsky is here! Today I wanna talk about Virtual DOM, specifically - React Virtual DOM So, the virtual DOM (Virtual D...
    编程 发布于2024-11-08
  • 我如何创建我的第一个开源项目。
    我如何创建我的第一个开源项目。
    这篇文章是关于我如何决定创建和共享一个简单的工具来输入剪贴板内容,从而产生了 CBPK 项目。 动机 一切都是从我尝试登录我的 AWS EC2 机器开始的。每次我想使用 Parsec 连接到 AWS EC2 时,我都必须输入整个操作系统密码,因为没有办法通过 Parsec 进行粘贴。...
    编程 发布于2024-11-08
  • 编程语言可以模仿变量运算符吗?
    编程语言可以模仿变量运算符吗?
    编程语言可以支持变量运算符吗?编程语言本身并不支持变量运算符的概念。但是,可以通过创建自定义解决方案来模拟它们的功能。自定义运算符功能:一种常见方法是定义关联运算符名称的对象或映射及其相应的功能。例如,在 JavaScript 中,您可以创建以下对象:var operators = { ' ...
    编程 发布于2024-11-08
  • 编写 Pythonic 代码:更清晰语法的提示和技巧。
    编写 Pythonic 代码:更清晰语法的提示和技巧。
    Python 是一种流行的编程语言,以其可读性和简单性而闻名。然而,即使是经验丰富的 Python 开发人员也可以通过学习新方法来编写更清晰、更高效的代码而受益。 编写 Python 代码的技巧 以下是编写 Pythonic 代码的一些技巧: 使用描述性变量名称。选择清楚表明变量代表什么的变量名称...
    编程 发布于2024-11-08
  • 您可以使用哪些方法来处理 PHP 中的嵌套数组(递归或迭代)?
    您可以使用哪些方法来处理 PHP 中的嵌套数组(递归或迭代)?
    PHP foreach 与嵌套数组:递归方法在 PHP 中使用嵌套数组可能是一个挑战。考虑一个要访问特定嵌套数组的数组,例如主数组的第二个元素。可以使用嵌套循环方法解决该问题:foreach ($tmpArray as $innerArray) { if (is_array($innerArra...
    编程 发布于2024-11-08
  • 如何高效地检查字符串中的字符串扩展?
    如何高效地检查字符串中的字符串扩展?
    在字符串中查找字符串给定一个字符串 url_string 和一个扩展名列表 extensionsToCheck,确定是否有任何扩展名出现在字符串中。一种简单的方法是遍历列表并检查每个扩展:for extension in extensionsToCheck: if extension in ...
    编程 发布于2024-11-08
  • 以下是一些标题选项,请记住问答格式并注重开发人员的实用性:

**直接切中要害:**

* **我应该使用什么 Python SOAP 客户端库
    以下是一些标题选项,请记住问答格式并注重开发人员的实用性: **直接切中要害:** * **我应该使用什么 Python SOAP 客户端库
    有哪些 Python SOAP 客户端库可用,在哪里可以找到它们的文档?在 Python 的 SOAP 客户端库领域,存在各种选项,每种选项都满足至具体要求。对于 SOAP 和 Python 的新手来说,选择合适的库的任务可能是艰巨的。以下是可用 SOAP 客户端库及其文档的综合指南。Legacy ...
    编程 发布于2024-11-08
  • 如何防止 Pandas 在保存 CSV 时添加索引列?
    如何防止 Pandas 在保存 CSV 时添加索引列?
    避免使用 Pandas 保存的 CSV 中的索引列使用 Pandas 进行修改后保存 csv 文件时,默认行为是包含索引列。为了避免这种情况,可以在使用 to_csv() 方法时将索引参数设置为 False。为了详细说明,请考虑以下命令序列:pd.read_csv('C:/Path/to/file....
    编程 发布于2024-11-08
  • 如何在没有 JavaScript 的情况下使用 POST 参数执行 PHP 重定向?
    如何在没有 JavaScript 的情况下使用 POST 参数执行 PHP 重定向?
    带 POST 参数的 PHP 重定向提出的查询涉及将用户从一个网页重定向到另一个网页,同时保留 POST 参数。原始方法涉及通过表单将 GET 参数传输到 POST 参数,该方法被认为不是最理想的,特别是对于禁用 JavaScript 的用户而言。该问题寻求一个纯基于 PHP 的解决方案,用于重定向...
    编程 发布于2024-11-08
  • 如何在 React 中访问提供者外部的上下文时处理错误
    如何在 React 中访问提供者外部的上下文时处理错误
    使用 React 的 Context API 时,处理组件尝试访问 Provider 外部上下文的情况非常重要。如果不这样做,可能会导致意想不到的结果或难以跟踪的错误。 问题 当您使用 createContext() 创建上下文时,您可以选择传递默认值。如果组件尝试访问提供程序外部的上下文,则返回此...
    编程 发布于2024-11-08
  • Filament:删除记录时删除附件
    Filament:删除记录时删除附件
    Filament 允许您向记录添加附件,但在删除记录时不会删除附件。 为了解决这个问题,我们有两种选择: 监听模型删除事件 当模型即将被删除时,它会触发删除事件。我们可以监听此事件来触发负责在模型不再存在之前删除任何附件的功能。 在模型类中,我们可以添加 booted 方法来向模型注...
    编程 发布于2024-11-08
  • 如何在信用记录检索中实现左连接?
    如何在信用记录检索中实现左连接?
    How to Perform Left Joins in Doctrine在函数 getHistory() 中,您尝试检索用户的信用历史记录。但是,连接子句中的初始语法导致了错误。要在 Doctrine 中执行左连接,可以使用以下语法:$qb ->select('a', 'u') ...
    编程 发布于2024-11-08
  • 以下是几种可能的标题:

1. How to Make CSS Transitions Work with `ngIf` in Angular 2? 
2. Why Does `ngIf` Break My CSS Transitions in Angular 2?
3. Angular 2: Combining `ngIf` and CSS Animations for Smooth Trans
    以下是几种可能的标题: 1. How to Make CSS Transitions Work with `ngIf` in Angular 2? 2. Why Does `ngIf` Break My CSS Transitions in Angular 2? 3. Angular 2: Combining `ngIf` and CSS Animations for Smooth Trans
    Angular 2 的 ngIf 和 CSS 过渡/动画如何在 Angular 2 中使用 CSS 将 div 从右侧滑入?<div class="note" [ngClass]="{'transition':show}" *ngIf="sho...
    编程 发布于2024-11-08

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3