对于用 VB.net 编写的项目,我想使用本文中的PropertyChangeNotifier
类,至少我想尝试一下它是否有帮助。
由于原始类是用 C# 编写的,我试图将这个类转换为 VB.net,但有一个函数我无法编译,我不知道为什么,也许你可以提供帮助。
C# 中的原始函数是:
private static void OnPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
PropertyChangeNotifier notifier = (PropertyChangeNotifier)d;
if (notifier.ValueChanged != null)
notifier.ValueChanged(notifier, EventArgs.Empty);
}
我的(略有改动的(翻译(以及几个网站的自动翻译(是:
Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim notifier As PropertyChangeNotifier
notifier = TryCast(d, PropertyChangeNotifier)
If (notifier Is Nothing) Then
Exit Sub
End If
RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)
End Sub
如果我删除编译器告诉我的RaiseEvent
,ValueChanged
是一个事件,不能直接调用,我应该使用RaiseEvent
.但是当我使用RaiseEvent
编译器告诉我
未声明"通知程序"。它可能无法访问,因为它 保护级别。
但正如 ylou 所看到的notifier
被宣布了几行。
我自己找到了解决方案。它没有解释错误消息,但至少它正在编译并希望之后可以工作。
我只是将其添加到类本身中:
Private Sub OnValueChanged(sender As Object, e As EventArgs)
RaiseEvent ValueChanged(sender, e)
End Sub
然后,我不是自己在函数OnPropertyChanged
中引发事件,而是调用我的新过程:
Private Shared Sub OnPropertyChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim notifier As PropertyChangeNotifier
notifier = TryCast(d, PropertyChangeNotifier)
If (notifier Is Nothing) Then
Exit Sub
End If
notifier.OnValueChanged(notifier, EventArgs.Empty)
End Sub
Private Shared Sub OnPropertyChanged(ByVal d As DependencyObject, ByVal e As DependencyPropertyChangedEventArgs)
Dim notifier As PropertyChangeNotifier = CType(d, PropertyChangeNotifier)
If notifier.ValueChanged IsNot Nothing Then RaiseEvent notifier.ValueChanged(notifier, EventArgs.Empty)
End Sub