|
|
@@ -1,6 +1,7 @@
|
|
|
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
|
|
+using System;
|
|
|
using System.Collections;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Collections.Specialized;
|
|
|
@@ -54,6 +55,7 @@ namespace Avalonia.Controls
|
|
|
|
|
|
private IEnumerable _items = new AvaloniaList<object>();
|
|
|
private IItemContainerGenerator _itemContainerGenerator;
|
|
|
+ private IDisposable _itemsCollectionChangedSubscription;
|
|
|
|
|
|
/// <summary>
|
|
|
/// Initializes static members of the <see cref="ItemsControl"/> class.
|
|
|
@@ -326,12 +328,8 @@ namespace Avalonia.Controls
|
|
|
/// <param name="e">The event args.</param>
|
|
|
protected virtual void ItemsChanged(AvaloniaPropertyChangedEventArgs e)
|
|
|
{
|
|
|
- var incc = e.OldValue as INotifyCollectionChanged;
|
|
|
-
|
|
|
- if (incc != null)
|
|
|
- {
|
|
|
- incc.CollectionChanged -= ItemsCollectionChanged;
|
|
|
- }
|
|
|
+ _itemsCollectionChangedSubscription?.Dispose();
|
|
|
+ _itemsCollectionChangedSubscription = null;
|
|
|
|
|
|
var oldValue = e.OldValue as IEnumerable;
|
|
|
var newValue = e.NewValue as IEnumerable;
|
|
|
@@ -428,7 +426,7 @@ namespace Avalonia.Controls
|
|
|
|
|
|
if (incc != null)
|
|
|
{
|
|
|
- incc.CollectionChanged += ItemsCollectionChanged;
|
|
|
+ _itemsCollectionChangedSubscription = incc.WeakSubscribe(ItemsCollectionChanged);
|
|
|
}
|
|
|
}
|
|
|
|