我的DataTable
有很多行,DataTable
绑定到DataGrid
。通过DataGrid
删除一行或多行后,我需要对重新执行的行执行特定的,非常复杂的检查。
我订阅RowDeleted
事件,并从那里调用检查方法。我的问题是,当通过DataGrid
删除多行时,会为每一行触发RowDeleted
事件,每次调用检查方法。由于检查方法检查所有剩余的行及其所有列,这对我的应用程序来说是一个很大的减速,也非常多余。删除所有选定的行后,运行它就足够了。
删除任意数量的行后,有没有办法解除只有一个事件?
答案 0 :(得分:2)
你可以借助计时器来做到这一点。声明全局计时器并设置其属性:
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事件中重新启动,所以只有在最后一个处理程序被触发后才会调用更新逻辑。
答案 1 :(得分:0)
我建议您将Checkbox
列添加到datagridview并提供delete button
,并让用户只删除每行上的相关复选框,以删除单行或多行。
并添加您的逻辑,检查按钮的删除命令中的剩余行。这将确保您的逻辑将在每次删除时运行一次,而不管删除的行数是多少。
答案 2 :(得分:0)
我建议你处理Delete logic in your ViewModel
喜欢:
'Delete' keydown event and bind it to the Command on viewmodel
。SelectedItems
的{{1}}属性绑定到删除命令的DataGrid
。CommandParameter