2014-07-25 6 views
0

У меня есть событие, которое срабатывает всякий раз, когда элементы моего списка меняются, и когда это событие увольняется, я вызываю метод для работы с этим списком. Когда в списке 5 новых элементов, мой метод получает 5 раз, foreach новый элемент, но мне нужно только обработать последнее событие. как я могу это решить?Событие, когда список изменился

MyObject.ListItemsChanged += RefreshElementsInUI; 

затем в методе:

private void RefreshElementsInUI(object sender, EventArgs e) 
{ 
    var listItems = getElementsForCommunication(communication); 
    ClearElementsInUi(); 
    foreach (var element in listItems) 
     addElementToMyControl(element); 
} 

на ListItemsChanged событие увольняют 5 раз, если есть 5 новых предметов в моей связи, но мне нужно только последнее событие, потому что я не должен делать Такая же работа примерно в 5 раз

надеюсь, что это поможет

+0

предоставление некоторого кода будет _really_ helpful –

+0

Как вы добавляете к списку сейчас? Как вы поднимаете события? Расскажите нам больше о своем коде, прежде чем мы сможем помочь. – DavidG

+0

добавил часть моего кода – patdhlk

ответ

0

Вероятно вы реализовали IBindingList или используют BindingList. Я рекомендую получить от ObservableCollection и определить OnCollectionChanged. Пакетный режим не встроен в любые коллекции, созданные с помощью событий (BindingList, ObservableCollection), но нетрудно реализовать собственную коллекцию, выведя из ObservableCollection, а затем написать пакетный метод AddRange().

public class MegaList<T> : ObservableCollection<T> 
{ 
    // Initialize new instance of Gyrasoft.Common.MegaList<T> with elements from collection. 
    public MegaList(IEnumerable<T> collection) 
    : base(collection) { } 

    /// Adds the elements of specified collection in batch mode, fire event once after 
    public MegaList<T> AddRange(IEnumerable<T> collection) 
    { 
    foreach (var i in collection) 
     Items.Add(i); 

    OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); 
    return this; 
    } 
} 
+0

спасибо, что это работает для меня :) – patdhlk

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