如何删除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));

请帮忙。谢谢

如何删除DataGrid中的Loaded事件处理程序

在需要显式删除事件侦听器的情况下,不能真正使用匿名处理程序。尝试一个简单的老方法:

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事件处理程序