У меня есть класс, который наследуется от ObservableCollection<T>
. В этом классе у меня есть метод, который меняет коллекцию внутри и для которой я хотел бы подавить события CollectionChanged
.Неплохо ли использовать список вызовов унаследованного события?
public class ContentBlockList : ObservableCollection<int> {
public void SomeMethod() {
var handlers = CollectionChanged.GetInvocationList();
foreach (NotifyCollectionChangedEventHandler handler in handlers) {
CollectionChanged -= handler;
}
// do stuff here
foreach (NotifyCollectionChangedEventHandler handler in handlers) {
CollectionChanged += handler;
}
}
}
Интуитивно кажется, что это должно работать, так как я получаю доступ к событию из его содержащего объекта. К сожалению, компилятор говорит
событие «ObservableCollection.CollectionChanged» может появиться только на левой стороне + = или - =
я могу получить код для работы, если я переопределить как CollectionChanged
и OnCollectionChanged()
, по существу заменяя версии .NET копиями моих собственных. Однако делать что-то подобное вызывает у меня подозрение, что я игнорирую причину, почему это плохое решение. Спасибо за любые мысли по этому поводу.
Поскольку отмена подписки и подписка на это событие будет относительно медленным процессом, было бы проще просто переопределить методы «CollectionChanged» и «OnCollectionChanged» и вызвать их соответствующий «базовый» метод. У вас есть флаг, показывающий, что вы обновляете внутренне, позволяя вам контролировать возникновение события в ваших переопределенных методах, только после того, как вы закончите, вы можете явно поднять «CollectionChanged» с помощью действия «Сброс». –
Это отличная идея и более показатель того, какое поведение я ищу. Я буду рад принять это за ответ, если вы опубликуете его. Благодарю. –
Важное значение имеет повышение 'Reset', убедитесь, что вы не забыли, иначе вещи, привязанные к вашему списку, могут выйти из синхронизации. –