尝试在我的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
?什么能解决上述问题?
答案 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