Ответ Шимми не сработал для меня в приложении Магазина Windows, вы все равно столкнетесь с проблемами повторного входа и получите InvalidOperationException
с надписью «Невозможно изменить ObservableCollection во время события CollectionChanged».
Мне пришлось использовать диспетчер пользовательского интерфейса и отключить / включить обработчик событий, чтобы избежать этих проблем.
Имейте в виду: это хак, и разработчики фреймворков пошли на многое, чтобы помешать вам сделать это.Поэтому, если вы хотите игнорировать их предупреждение, будьте осторожны, чтобы не выстрелить себе в ногу.
Items.CollectionChanged += ItemsChanged;
private async void ItemsChanged(object sender, NotifyCollectionChangedEventArgs e)
{
if(condition)
{
//rollback
await CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(
CoreDispatcherPriority.Normal, () => {
//disable/enable event handler
Items.CollectionChanged -= ItemsChanged;
Items.Remove(e.NewItems[0]);
Items.CollectionChanged += ItemsChanged;
})).AsTask();
}
}
Это позволит избежать исключения, избегать рекурсивного вызова обработчика и корректно обновлять пользовательский интерфейс.