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的编辑模式导致的大多数问题。

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WPF DataGridWPF(Windows Presentation Foundation)框架中的一个控件,它允许您显示和编辑表格数据。下面是一些关于 WPF DataGrid 的常见问题和答案: 1. 如何创建 WPF DataGrid? 您可以在 XAML 中使用以下代码创建 WPF DataGrid: ``` <DataGrid ItemsSource="{Binding YourData}"> <DataGrid.Columns> <DataGridTextColumn Header="Column1" Binding="{Binding Property1}" /> <DataGridTextColumn Header="Column2" Binding="{Binding Property2}" /> <DataGridTextColumn Header="Column3" Binding="{Binding Property3}" /> </DataGrid.Columns> </DataGrid> ``` 2. 如何将数据绑定到 WPF DataGrid? 您可以在 XAML 中使用以下代码将数据绑定到 WPF DataGrid: ``` <DataGrid ItemsSource="{Binding YourData}"> ... </DataGrid> ``` 其中,“YourData”是您要绑定的数据集合。 3. 如何在 WPF DataGrid 中添加列? 您可以在 XAML 中使用“DataGrid.Columns”元素添加列。例如,以下代码将添加一个名为“Column1”的文本列: ``` <DataGrid.Columns> <DataGridTextColumn Header="Column1" Binding="{Binding Property1}" /> </DataGrid.Columns> ``` 4. 如何在 WPF DataGrid 中编辑数据? WPF DataGrid 允许您直接在表格中编辑数据。只需将“IsReadOnly”属性设置为“False”,就可以启用编辑模式。例如,以下代码将启用编辑模式: ``` <DataGrid IsReadOnly="False"> ... </DataGrid> ``` 5. 如何在 WPF DataGrid 中添加行? 您可以在代码中使用“Items.Add()”方法添加行。例如,以下代码将添加一个新行: ``` YourData.Add(new YourDataItem { Property1 = "Value1", Property2 = "Value2", Property3 = "Value3" }); ``` 其中,“YourData”是您要绑定的数据集合,“YourDataItem”是数据项的类型。 希望这些信息对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值