当前位置: 首页 > news >正文

WPF DataGrid调试错误总结

最近WPF中使用了DataGrid做了表格,框架版本为472,遇到了不少的问题,因为软件添加了一个退出进程的全局错误捕获,因此不得不解决所有问题,这边总结一下DataGrid的问题

EditItem is not allowed for this view

按字面意思理解是不允许编辑,而我出现问题的部分则是在Cell中的DataTemplate添加了TextBlock,然后快速点击TextBlock就触发了这个报错,虽然我不能理解为什么会有这样的报错,但是只要将这种无法编辑的Cell的IsReadOnly设置为True即可

‘DeferRefresh’ is not allowed during an AddNew or EditItem transaction

按照报错的意思就是在AddNew或者EditItem的过程中不能够调用DeferRefresh,DeferRefresh的作用是延时刷新,在DataGrid初始化绑定数据时会自动调用,避免在切换绑定、刷新布局时更新数据。

在网上搜索发现大多遇到的情况就是在编辑某个Cell的过程中进行了页面切换然后再切换回去导致的,这个和我这边堆栈中推测的问题不大一样,我这边遇到的问题则是在打开Dialog时初始化过程中出现了报错。

后来,查资料发现,AddNew or EditItem这其实是一个DataGrid的状态,DataGrid存在一个编辑状态,进入编辑状态时会触发事件beginEditing,结束时会触发事件CellEndEditing(单元格结束)、RowEndEditing(行结束)

因此,添加了相关debug发现,在点击某个单元格之后会进入编辑状态,然后不切换行的情况下,点击了另一个单元格的按钮,这个按钮会打开一个新的模态窗口,而点击按钮打开窗口时,仅有单元格会被结束编辑,而行编辑结束操作则被新的模态窗口打断了

因此,当我关闭这个页面时,由于行编辑未结束,导致这个view的单例未被自动回收,下次打开时会自动引用上次的view对象,而上次的对象则还处于编辑状态,在编辑状态时进行了绑定操作则出现了这个报错

解决方案则也是使用IsReadOnly = True

总结

DataGrid确实会遇到好些问题,好像都是由于他的编辑模式导致的,DataGrid和其他控件组合使用就会由于编辑模式导致各种奇怪的问题,如果没有必要可以把IsReadOnly默认设置为True,能解决大部分DataGrid的编辑模式导致的大多数问题。

http://www.lryc.cn/news/419575.html

相关文章:

  • 【GCC】结合GPT4 延迟梯度学习1:公式推导及理论分析
  • 【Linux】【网络】进程间关系与守护进程
  • 红黑树的插入与删除
  • 联通数科如何基于Apache DolphinScheduler构建DataOps一体化能力平台
  • Python知识点:如何使用Mitmproxy进行HTTP/HTTPS流量分析
  • 06:【stm32】OLED模块的简单使用
  • HIVE4.0.0的10000端口启动不起来的一种情况
  • [极客大挑战 2019]FinalSQL1
  • Go语言 标签Label
  • 自反射 RAG 管道:如何实现?
  • 怎么将jar注册为windows系统服务详细操作
  • 数据结构.
  • thinkphp5之sql注入漏洞-builder处漏洞
  • 30集 如何编写ESP32程序接入AIGC实现更多有趣的功能-《MCU嵌入式AI开发笔记》
  • 【JUC】Java对象内存布局和对象头
  • 简单介绍一下css中transform的内容
  • C 循环
  • 什么是设计模式?一文理解,通俗易懂!
  • doxygen制作接口文档
  • PDF怎么在线转Word?介绍四种转换方案
  • 大数据应用型产品设计方法及行业案例介绍(可编辑110页PPT)
  • 【Python零基础学习】Python环境安装和IDE选择
  • 【langchain学习】使用LangChain创建具有上下文感知的问答系统
  • 原神4.8版本升级计划数据表
  • 海南云亿商务咨询有限公司放大电商品牌影响力
  • 用exceljs和file-saver插件实现纯前端表格导出Excel(支持样式配置,多级表头)
  • TIA博途_下载时提示密码错误,但是之前并没有设置过密码的解决办法
  • 使用消息队列、rocketMq实现通信
  • 通过LLM大模型将「白雪公主的故事」转为图数据存储
  • MyBatisPlus 第一天