Получить недавно добавленный элемент в виде коллекции - PullRequest
1 голос
/ 07 декабря 2011

Есть ли способ получить позицию или элемент недавно добавленного элемента в CollectionView.

Reagrds, Vikram

Ответы [ 3 ]

2 голосов
/ 07 декабря 2011

Подписаться на событие CollectionView.CollectionChanged. Когда событие срабатывает, посмотрите на свойство Action NotifyCollectionChangedEventArgs, и, если оно равно Add, новые добавленные элементы будут включены в коллекцию NewItems. Обычно это будет только один элемент, который вы можете сохранить в соответствующей переменной или члене класса. Если вам необходимо узнать, что это был за недавно добавленный элемент, прочитайте эту переменную.

1 голос
/ 07 декабря 2011

Реализация собственной коллекции на основе CollectionView. Внутри этой коллекции храните карту между элементами и временем, когда они были добавлены (для обнаружения новых добавленных элементов подпишитесь на событие CollectionView.CollectionChanged). Определите метод доступа к элементам в вашей коллекции по времени public IEnumerable<T> GetItems(DateTime startTime, DateTime endTime).

0 голосов
/ 07 декабря 2011

Создать исходную коллекцию, которая унаследована от INotifyCollectionChanged, вы можете использовать ObservableCollection, которая неявно наследуется от INotifyCollectionChanged. И тогда вы можете подписаться на событие CollectionChanged для своего источника и посмотреть на свойство Action и NewItems Collection в нем. Пример кода -

public ObservableCollection<object> Names
{
    get;
    set;
}

private ICollectionView source;
public ICollectionView Source
{
   get
   {
      if (source == null)
      {
         source = CollectionViewSource.GetDefaultView(Names);
         source.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(source_CollectionChanged);
      }
      return source;
    }
}

void source_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
   if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
   {
      // Can play with e.NewItems here.
   }
}
...