C# 如何在DataGrid中删除已加载的事件处理程序?
我试图在加载C# 如何在DataGrid中删除已加载的事件处理程序?,c#,wpf,datagrid,C#,Wpf,Datagrid,我试图在加载DataGrid时动态加载列,并在初始化中添加带有一些参数的事件处理程序 dataGrid.Loaded += (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid)); 但不知道如何在加载DataGrid后删除此处理程序。以下代码不起作用 dataGrid.Loaded -= (sender, args) => AddColumns(dataGrid, GetAttachedColumns
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;
}
}
另见其他问题:
dataGrid.Loaded-=DataGridLoaded代码>给出一个错误?