private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MyVirtualizingPanel virtualizingPanel = d as MyVirtualizingPanel; if (virtualizingPanel == null) { return; } virtualizingPanel.ClearItems(); INotifyCollectionChanged collection1 = e.OldValue as INotifyCollectionChanged; if (collection1 != null) { virtualizingPanel.UnhookCollectionChanged(collection1); } INotifyCollectionChanged collection2 = e.NewValue as INotifyCollectionChanged; if (collection2 == null) { return; } List <IVirtualizable> virtualizableList = new List <IVirtualizable>(); foreach (object obj in (IEnumerable)(collection2 as ICollection)) { if (obj is IVirtualizable) { virtualizableList.Add(obj as IVirtualizable); } } virtualizingPanel.AddItems((IEnumerable <IVirtualizable>)virtualizableList); virtualizingPanel.HookUpCollectionChanged(collection2); }
private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { MyVirtualizingPanel virtualizingPanel = d as MyVirtualizingPanel; if (virtualizingPanel == null) { return; } virtualizingPanel.ClearItems(); // ISSUE: explicit reference operation INotifyCollectionChanged oldValue = e.OldValue as INotifyCollectionChanged; if (oldValue != null) { virtualizingPanel.UnhookCollectionChanged(oldValue); } // ISSUE: explicit reference operation INotifyCollectionChanged newValue = e.NewValue as INotifyCollectionChanged; if (newValue == null) { return; } List <IVirtualizable> virtualizableList = new List <IVirtualizable>(); IEnumerator enumerator = (newValue as ICollection).GetEnumerator(); try { while (enumerator.MoveNext()) { object current = enumerator.Current; if (current is IVirtualizable) { virtualizableList.Add(current as IVirtualizable); } } } finally { IDisposable disposable = enumerator as IDisposable; if (disposable != null) { disposable.Dispose(); } } virtualizingPanel.AddItems((IEnumerable <IVirtualizable>)virtualizableList); virtualizingPanel.HookUpCollectionChanged(newValue); }