2014-11-07 4 views
1

Мне нужно проверить некоторые условия, а затем принять решение о добавлении нового элемента в мою коллекцию или нет, так или иначе, я могу предотвратить добавление в событие CollectionChanged или слишком поздно на смысл? на самом деле я могу изменить новый пункт, но не может удалить его из коллекции NewItems за счет исключения времени выполнения:Запретить добавление нового элемента в ObservableCollection.CollectionChanged событие

protected void MyFilter(object sender, NotifyCollectionChangedEventArgs e) 
    {     
     f (e.Action == NotifyCollectionChangedAction.Add) 
     { 
      foreach (Item item in e.NewItems) 
      { 
       if (!Item.CanBeAdded()) 
       { 
         //Prevent adding the Item ! 
       } 
      }    
     } 
    } 
+0

Некоторые структуры обходятся этим путем реализации интерфейса INotifyCollectionChanging. – Aron

+0

Интересный вопрос, очень похожий на мой собственный [здесь] (http://stackoverflow.com/questions/42528460/add-a-check-with-messagebox-when-datagrid-is-changed/) ... вы иметь более обновленный ответ или каков текущий статус этого? –

ответ

0

Ну проблема здесь это уже добавлен в коллекцию. Единственный способ сделать это, если я последую этому, - это удалить его из коллекции. Но это позволит перезапустить подписку MyyFilter, которую вы создали.

Если эта коллекция привязана к сетке или где угодно, где вы можете создать элемент из пользовательского интерфейса, то я предлагаю вам создать пользовательскую наблюдаемую коллекцию.

Базовый код будет таким.

public class MyObservableCollection<T> : ICollection<T> 
, INotifyCollectionChanged 
, INotifyPropertyChanged 
{ 
} 

Внедрите свою логику проверки в методе добавления ICollection.

, если хотите, просто скопируйте это guys осуществления.

Смежные вопросы