Мне было интересно, действительно ли это работает?
private void RegisterKeyChanged(T item) 
{
    item.OnKeyChanged += (o, k) => ChangeItemKey((T)o, k);
}
private void UnRegisterKeyChanged(T item) 
{
    item.OnKeyChanged -= (o, k) => ChangeItemKey((T)o, k);
}
Как компилятор знает, что обработчики событий одинаковы? Это даже рекомендуется?