我在加载DataGrid
时尝试动态加载列,并在初始化时添加带有一些参数的事件处理程序。
dataGrid.Loaded += (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));
但是在加载DataGrid之后不知道如何删除这个处理程序。以下代码无效。
dataGrid.Loaded -= (sender, args) => AddColumns(dataGrid, GetAttachedColumns(dataGrid));
请帮忙。感谢。
答案 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;
}
}
另见其他问题: