Я написал пользовательский элемент управления WPF с расширением поиска, назовем его MyControl
.
Элемент управления является потомком класса ItemsControl
.
Итак, я передаю источник данных следующим образом:
Сам элемент управления использует
protected override void OnItemsSourceChanged(System.Collections.IEnumerable oldValue, System.Collections.IEnumerable newValue)
{
if (newValue != null)
{
ICollectionView view = CollectionViewSource.GetDefaultView(newValue);
view.Filter += this.FilterPredicate;
}
if (oldValue != null)
{
ICollectionView view = CollectionViewSource.GetDefaultView(oldValue);
view.Filter -= this.FilterPredicate;
}
base.OnItemsSourceChanged(oldValue, newValue);
}
, чтобы отфильтровать представление исходной коллекции (отображая ее во внутреннем ListBox).
Теперь предположим, что у нас есть 10 таких MyControls, определенных в XAML с одним и тем же DynamicSource.
Проблема заключается в том, что если один из них применяет фильтр к исходной коллекции, это повлияет и на все остальные экземпляры.
Как бы вы изменили элемент управления, чтобы избежать такого поведения?