AddHandler行无法编译

时间:2014-09-14 07:48:21

标签: c# wpf vb.net events handler

尝试在我的ICommand实现中将以下C#代码更改为VB.NET:

public event EventHandler CanExecuteChanged
{
    add { CommandManager.RequerySuggested += value; }
    remove { CommandManager.RequerySuggested -= value; }
}

这是VB.NET中等效的add方法:

<MethodImpl(MethodImplOptions.Synchronized)> _
AddHandler(ByVal value As PropertyChangedEventHandler)
  propchanged = DirectCast([Delegate].Combine(propchanged, value), PropertyChangedEventHandler)

  AddHandler CommandManager.RequerySuggested, value
End AddHandler

最后一行AddHandler CommandManager.RequerySuggested, value抛出编译时错误,说明类型的值&#39; System.ComponentModel.PropertyChangedEventHandler&#39;无法转换为&#39; System.EventHandler&#39; 。为什么?另外,为什么PropertyChangedEventHandler来自EventHandler?什么能解决上述问题?

1 个答案:

答案 0 :(得分:0)

委托不遵循继承,因此PropertyChangedEventHandler&amp; EventHandler是两个不同的东西,不能用来互相引用。

其次,您显示的C#代码适用于CanExecuteChanged / RequerySuggested,但vb代码查找PropertyChanged事件

作为建议,将有问题的c#代码转换为VB.net

<MethodImpl(MethodImplOptions.Synchronized)> _
AddHandler(ByVal value As EventHandler)
    AddHandler CommandManager.RequerySuggested, value
End AddHandler

以上只是假设AddHandler方法适用于CanExecuteChanged,您可能需要相应调整

也许完整的实施将是

Public Custom Event CanExecuteChanged As EventHandler
    AddHandler(ByVal value As EventHandler)
        AddHandler CommandManager.RequerySuggested, value
    End AddHandler
    RemoveHandler(ByVal value As EventHandler)
        RemoveHandler CommandManager.RequerySuggested, value
    End RemoveHandler
End Event