![](/img/trans.png)
[英]Why does the DataTable.Rows.Count not change after deleting rows?
[英]Fire only one event after deleting multiple DataTable rows
我有一个DataTable
有许多行,而DataTable
绑定到DataGrid
。 通过DataGrid
删除一行或多行后,我需要对重新行进行特定的,非常复杂的检查。
我订阅了RowDeleted
事件,并从那里调用了检查方法。 我的问题是,当通过DataGrid
删除多行时,会为每一行触发RowDeleted
事件,每次调用check方法。 由于检查方法检查所有剩余的行及其所有列,这对我的应用程序来说是一个很大的减速,也非常多余。 删除所有选定的行后,运行它就足够了。
删除任意数量的行后,有没有办法只触发一个事件?
你可以借助计时器来做到这一点。 声明全局计时器并设置其属性:
System.Timers.Timer _delayTimer = new System.Timers.Timer(1000);
_delayTimer.Elapsed += new EventHandler(_delayTimer_Elapsed);
void _delayTimer_Elapsed(object sender, EventArgs e)
{
_delayTimer.Stop();
Dispatcher.Invoke(new Action(UpdateMethodName));
//or - with passing arguments:
Dispatcher.Invoke(new Action<string>(UpdateMethodName), new object[]{"argument"});
}
现在在你的RowDeleted-Event中,你这样做:
_delayTimer.Stop();
_delayTimer.Start();
因为计时器一次又一次地在RowDeleted事件中重新启动,所以只有在最后一个处理程序被触发后才会调用更新逻辑。
我建议你将Checkbox
列添加到datagridview并提供一个delete button
,让用户只能通过选中每行的相关复选框来删除单行或多行。
并添加您的逻辑,检查按钮的删除命令中的重新存储行。 这将确保您的逻辑将在每次删除时运行一次,而不管删除的行数是多少。
我建议你Delete logic in your ViewModel
处理Delete logic in your ViewModel
如:
'Delete' keydown event and bind it to the Command on viewmodel
使用交互性'Delete' keydown event and bind it to the Command on viewmodel
。 DataGrid
的SelectedItems
属性绑定到Delete Command的CommandParameter
。 DeleteCommand handler, remove the items from the DataGrid's ItemsSource.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.