即使 DependencyProperty 没有更改,也强制更新通知

2024-01-08

我有一个自定义 WPF 控件。它有一个典型的DependencyProperty,我们称之为Status,通过绑定定期更新。 (更具体地说,它绑定到一个根据发送通知的属性INotifyPropertyChanged).

我想实现某种“过期”行为:如果Status一段时间没有更新,就会发生一些事情。理想情况下,这个逻辑应该在我的自定义控件内(我有很多实例)。我设置了一个DispatcherTimer in the Status更改处理程序并执行我需要的操作。一切都很好。

问题通常是,Status更新为相同的值,即实际上没有改变。但即使在这种情况下,它也应该重置过期计时器。

即使我强制我的视图模型(实现INotifyPropertyChanged)发送分配通知,无论值是否更改,WPFDependencyProperty实现足够智能,可以自行检查更改,并且不会调用我的PropertyChangeCallback我注册的Status (in FrameworkPropertyMetadata).

最好的做法是什么?

我可以创建另一个DependencyProperty在我的控制下,我总是会在分配时改变Status(例如,分配一个随机数或翻转bool),并在那里进行计时器处理。但这似乎是一种丑陋且非常迂回的方式,尤其是使用起来。


只是为了回答我自己的问题并至少提供一些解决方案,最后我做了@Janne 的建议。我做了一个包装类int,因此每个赋值都会创建一个新对象并被如此对待。 (我没有覆盖Equals数值比较的方法Status,因此DP只能使用对象身份检查)。

缺点是,这肯定会产生大量小垃圾(在应用程序的整个生命周期中每秒有 100 多个实时分配),但这不是问题;尤其是无论如何,WPF 都会封装所有内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使 DependencyProperty 没有更改,也强制更新通知 的相关文章

  • 如何查找局域网中所有主机上正在运行的程序的所有实例?

    出于实际目的 SqlDataSourceEnumerator 的作用是查找在 LAN 上的各个 PC 上运行的 SQL Server 的所有实例 是否有等效的方法可以查找任意应用程序的运行实例 编辑 好的 所以这只有效 因为这些应用程序有预
  • C# .Net Serial DataReceived 事件响应对于高速数据来说太慢

    我已经设置了一个 SerialDataReceivedEventHandler 并在 VS2008 Express 中使用基于表单的程序 我的串口设置如下 115200 8N1 Dtr 和 Rts 已启用 接收字节阈值 1 我有一个通过蓝牙
  • IL 的仿制药?

    是否可以在 IL 生成器中使用泛型 DynamicMethod method new DynamicMethod GetStuff typeof int new Type typeof object ILGenerator il metho
  • 正则表达式不等于字符串

    我用正则表达式用头撞墙 我正在尝试定义一个表达式 该表达式完全排除此文本 System 不区分大小写 但可以包含 系统 这个词提供的不仅仅是这个 例子 系统 无效 系统 无效 系统 无效 系统 无效 asd 系统 有效 asd 系统 asd
  • 如何动态加载包含非托管代码的原始程序集?(绕过“无法验证的代码失败策略检查”异常)

    我将举一个使用的例子系统 Data SQLite DLL http sqlite phxsoftware com 这是一个包含非托管代码的混合程序集 如果我执行这个 var assembly Assembly LoadFrom System
  • 在 DataGridView 中隐藏行非常慢

    我在 Winforms 应用程序中有一个 DataGridView 大约有 1000 行 未绑定 和 50 列 隐藏一列需要整整 2 秒 当我想隐藏大约一半的行时 这就成为一个问题 private void ShowRows string
  • StreamReader,C#,peek

    我有一个 StreamReader 它偶尔会检查它是否有更多内容可以从简单的文本文件中读取 它使用 peek 属性 问题是 当我使用 peek 时 位置发生了变化 尽管不应该发生 FileStream m fsReader new File
  • 重写 WPF 工具包图表中的 DataPointStyle

    我想覆盖DataPointStyle of the LineSeries在我的 WPF 工具包中Chart
  • 实用程序库中应包含哪些内容[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 随着我的项目越来越多 我发现我经常从一个项目到另一个项目 从一个客户到另一个客户重复许多常见的任务 因此 我开始组装一个 实用程序 库 这是这些
  • C# Julian 日期解析器

    我在电子表格中有一个单元格 它是 Excel 中的日期对象 但当它来自 C1 的 xls 类时 它会变成双精度型 类似于 2009 年 1 月 7 日的 39820 0 我读到这是儒略日期格式 有人可以告诉我如何在 C 中将其解析回 Dat
  • WPF HierarchicalDataTemplate 不会在属性更改时更新 ItemsSource

    这是一些 XAML
  • 如何在 VS2017/2015 中打开 .xproj 文件

    我有一个带有扩展名的 NET core 项目 xproj 当我在VS 2017中打开项目时 项目文件 xproj migrated to csproj 如何打开 xproj 文件 Visual Studio 2017 2015 我需要安装任
  • 使 DataTemplate 可混合

    如何为 ViewModel 制作可混合的数据模板 可在表达式混合中设计 当我转到资源并尝试直接编辑数据模板时 我在绘图板上看到的只是一个空白矩形 这是因为 DataTemplate 没有绑定到任何东西 当然 我可以创建一个 UserCont
  • c#.NET 和 sprintf 语法

    这段代码如何翻译成 C 具体来说是如何sprintf用C 实现 string output The user s logged in string loggedIn is string loggedOut isn t if TheUser
  • 从 xaml 获取 RowIndex

    我有一个带有 DataGridTemplateColumns 的 DataGrid 在 TemplateColumn 中 我使用工作正常的 DataTrigger 它从 DataGrid 父级检索项目计数
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • .NET“默认行终止符”?

    有什么方法可以弄清楚 NET 使用什么作为其 默认行终止符 例如 StringBuilder AppendLine String 的文档表示 附加指定字符串的副本 后跟默认行终止符 NET 中的几个与文本相关的类引用相同的概念 有什么方法可
  • 在一个数据访问层中处理多个连接字符串

    我有一个有趣的困境 我目前有一个数据访问层 它必须与多个域一起使用 并且每个域都有多个数据库存储库 具体取决于所调用的存储过程 目前 我只需使用 SWITCH 语句来确定应用程序正在运行的计算机 并从 Web config 返回适当的连接字
  • 枚举扩展方法

    在vs2008中 是否可以编写适用于任何枚举的扩展方法 我知道您可以针对特定枚举编写扩展方法 但我希望能够使用单个扩展方法对每个枚举进行处理 这可能吗 是的 只需针对基础进行编码Enum类型 例如 public static void So
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码

随机推荐

  • 安装valgrind,启动时出现致命错误

    我正在安装 Valgrind 但遇到一些问题 我的平台信息 Linux xx ThinkPad X61 3 2 0 39 generic pae 62 Ubuntu SMP Wed Feb 27 22 25 11 UTC 2013 i686
  • 两个 kubernetes 集群之间的 mTLS

    我正在尝试在两个 kubernetes 集群中的两个应用程序之间获取 mTLS 而无需使用 Istio 的方式 通过其入口网关 我想知道以下内容是否可行 对于 Istio Likerd Consul 假设我们有一个 k8s 集群 A 和一个
  • React Router browserHistory 适用于本地,不适用于生产

    每当我在本地使用 browserHistory 时 我都没有问题 但是当我在发货之前测试它时 我会得到一个带有错误的空白页面 因此 当我用 hashHistory 替换 browserHistory 时 一切正常 但我丢失了漂亮的网址 未捕
  • Thymeleaf - 如何有条件地将选中的属性添加到输入

    如你所知 input组件有一个属性 checked是否将复选框标记为默认启用
  • Activity 从下到上滑动,但后台 Activity 不应移动

    我正在尝试将一项活动从底部滑动到顶部 这是我能够做到的 但是 当从底部滑动到顶部时 我的后台活动也滑动到底部 我想将后台活动保持在与原来相同的位置 以便新活动在打开时看起来像是后台活动的覆盖 这是我的slide in up xml
  • 在 R 中将点图保存为 pdf [重复]

    这个问题在这里已经有答案了 当在函数内执行此命令时 我无法将点图保存为 pdf 正常调用时效果很好 df lt data frame a runif 10 b runif 10 c runif 10 x 1 10 pdf test pdf
  • AIDL Client 未绑定到远程服务

    我正在尝试使用远程服务运行简单的乘法 我有 AIDL 服务器文件声明和定义方法 在AIDL中 我在服务器的包名称下复制了与服务器相同的AIDL文件 我已经给出了服务器服务的意图过滤器的操作 我的 AIDL 客户端代码仍然没有连接到该服务 A
  • 本地函数和 SOLID 原则 C#

    我知道从 C 7 0 开始我们可以创建局部函数 但这与实现良好设计模型的 SOLID 原则有何关系 我的意思是 这不会打破单一职责原则 在另一个函数中添加一个函数吗 我们可以委托这个简单的任务在另一个方法或另一个新类中进行计算吗 对于允许我
  • 如何将侦听器从 Fragment 传递到 DialogFragment

    我有我Fragment这就是如何DialogFragment The DialogFragment创建并显示TimePickerDialog dialog 我希望调用 Fragment 来实现imePickerDialog OnTimeSe
  • 如何在 C# 中以编程方式执行方法重载解析?

    当 C 编译器解释方法调用时 它必须使用 静态 参数类型来确定实际调用的是哪个重载 我希望能够以编程方式完成此操作 如果我有一个方法的名称 astring 声明它的类型 一个实例System Type 以及参数类型列表我希望能够调用标准库函
  • 使用 Github 推送提交时出错: fatal: 无法读取用户名

    自从几次以来 我在我的项目中使用 Github 当我想要推送提交时我遇到了问题 首先 我创建了一个存储库 然后我克隆了叉子 使用命令行git clone https github com 并且 在进行修改后 我已成功承诺 git commi
  • 强制所有区域使用相同的布局

    我有以下项目结构 视图 共享 布局 区域 Area1 Views ControllerName Index 区域 AreaN Views ControllerName Index 有什么办法强制所有区域都使用 Layout as a 基地布
  • Git 服务器挂钩:获取正在推送的文件的内容?

    我正在尝试在我的团队中强制执行一些编码规则 为此 我编写了许多客户端挂钩 这些挂钩可以正常工作 但现在我希望当开发人员将其修改推送到中央存储库时运行相同的检查 但它们不起作用 这是我想做的 我想逐行遍历推送的文件 检查是否违反编码约定 如果
  • Chrome 版本 61 中扩展中的 ES6 模块

    这与以下问题不是同一个问题Google Chrome 扩展开发中的 ES6 模块 意外标记 https stackoverflow com questions 36796191因为这已经过时并且已经得到解答 谷歌发布了一份新闻稿 声称 Ch
  • 如何传递元组列表作为 OpenAI Gym 中的动作空间?

    从头开始创建 OpenAI Gym 环境时 必须定义一个动作空间 这是通过数据包 空间 中自己的 数据结构 来完成的 有几种不同类型的空间 如盒子 离散等 我有一个元组列表 我想用作操作空间 有没有办法做到这一点 我本来可以使用spaces
  • 如何从终端运行 google colab?

    我正在 google colab 中运行深度学习模型 它与 colab 笔记本配合得很好 问题是 随着云colab笔记本中深度学习模型训练的进展 我自己的电脑CPU和内存使用率也开始上升 仅 Colab Notebook 浏览器窗口的 RA
  • 调用 RevalidateBackHistory.php 中未定义的方法 Symfony\Component\HttpFoundation\BinaryFileResponse::header()

    我编写了一个中间件 以便用户在登录后无法再次进入登录页面 如果已经登录 它将重定向到管理面板 这是代码 class RevalidateBackHistory public function handle request Closure n
  • 使用 Socket.io 将数据从 Chrome for Android 连续传输到 Node.js 服务器

    我需要传输触摸位置 in 安卓版 Chrome 不断地 to a Node js服务器使用Socket io 不过 我猜 传输速度太快了 前几个值接收到服务器 第一次接触大约六个值 后来只有两个或三个值 然后似乎出现交通拥堵 在很长一段时间
  • 在缺失的模块上构建 Python 等

    我有另一个线程寻求有关 缺少 zlib 的帮助 在良好的帮助下 问题已经解决 几乎 现在我有兴趣自己构建 Python 在 Ubuntu 10 10 上 几个重要的问题引起了我的注意 构建 Python 后 例如 2 7 1 如果缺少模块
  • 即使 DependencyProperty 没有更改,也强制更新通知

    我有一个自定义 WPF 控件 它有一个典型的DependencyProperty 我们称之为Status 通过绑定定期更新 更具体地说 它绑定到一个根据发送通知的属性INotifyPropertyChanged 我想实现某种 过期 行为 如