我正在查看this博客,并且正在尝试将该代码段转换为VB。
我在这条线上遇到困难:
NotifyCollectionChangedEventHandler handlers = this.CollectionChanged;
注意:CollectionChanged是此事件(“ this”是
ObservableCollection<T>
的替代)。 最佳答案
要引发事件,OnCollectionChanged
应该可以正常工作。如果要查询它,则必须更加滥用并使用反射(对不起,示例是C#,但实际上应该是相同的-我在这里不使用任何特定于语言的功能):
NotifyCollectionChangedEventHandler handler = (NotifyCollectionChangedEventHandler)
typeof(ObservableCollection<T>)
.GetField("CollectionChanged", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(this);
等处理程序(通过
GetInvocationList()
)。因此,基本上在您的示例中(关于该帖子),请使用:
Protected Overrides Sub OnCollectionChanged(e As NotifyCollectionChangedEventArgs)
If e.Action = NotifyCollectionChangedAction.Add AndAlso e.NewItems.Count > 1 Then
Dim handler As NotifyCollectionChangedEventHandler = GetType(ObservableCollection(Of T)).GetField("CollectionChanged", BindingFlags.Instance Or BindingFlags.NonPublic).GetValue(Me)
For Each invocation In handler.GetInvocationList
If TypeOf invocation.Target Is ICollectionView Then
DirectCast(invocation.Target, ICollectionView).Refresh()
Else
MyBase.OnCollectionChanged(e)
End If
Next
Else
MyBase.OnCollectionChanged(e)
End If
End Sub
关于c# - 需要帮助将C#转换为VB,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2178703/