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

时间:2014-04-26 00:47:21

标签: c# wpf datagrid

我在加载DataGrid时尝试动态加载列,并在初始化时添加带有一些参数的事件处理程序。

dataGrid.Loaded += (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));

但是在加载DataGrid之后不知道如何删除这个处理程序。以下代码无效。

dataGrid.Loaded -= (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));

请帮忙。感谢。

1 个答案:

答案 0 :(得分:3)

如果需要显式删除事件侦听器,则无法真正使用匿名处理程序。尝试一种简单的方法:

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;
    }
}

另见其他问题: