如何删除DataGrid中的Loaded事件处理程序
本文关键字:中的 Loaded 事件处理 程序 DataGrid 何删除 删除 | 更新日期: 2023-09-27 18:00:08
我试图在加载DataGrid
时动态加载列,并在初始化时添加带有一些参数的事件处理程序。
dataGrid.Loaded += (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));
但不知道如何在加载DataGrid后删除此处理程序。以下代码不起作用。
dataGrid.Loaded -= (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));
请帮忙。谢谢
在需要显式删除事件侦听器的情况下,不能真正使用匿名处理程序。尝试一个简单的老方法:
private void DataGridLoaded(object sender, RoutedEventArgs args)
{
AddColumns(dataGrid, GetAttachedColumns(dataGrid));
}
然后你可以简单地添加/删除:
dataGrid.Loaded += DataGridLoaded;
dataGrid.Loaded -= DataGridLoaded;
或者,如果您真的想使用lambda形式,可以保留成员变量中的引用。例如:
public class MyControl
{
private RoutedEventHandler _handler;
public void Subscribe()
{
_handler = (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));
dataGrid.Loaded -= _handler;
}
public void Unsubscribe()
{
dataGrid.Loaded -= _handler;
}
}
另请参阅其他问题:
- 如何删除lambda事件处理程序