0

リストの項目が変更されるたびに発生するイベントがあり、このイベントが発生すると、このリストを操作するメソッドを呼び出します。リストに 5 つの新しい項目がある場合、メソッドは新しい要素ごとに 5 回呼び出されますが、最後のイベントを処理するだけで済みます。どうすればこれを解決できますか?

MyObject.ListItemsChanged += RefreshElementsInUI;

次に、メソッドで:

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

コミュニケーションに 5 つの新しいアイテムがある場合、ListItemsChanged イベントが 5 回発生しますが、同じ作業を約 5 回行う必要がないため、最後のイベントのみが必要です。

これが役立つことを願っています

4

1 に答える 1

1

IBindingList を実装したか、BindingList を使用しているようです。ObservableCollectionから派生させ、 OnCollectionChangedを定義することをお勧めします。バッチ モードは、イベント ドリブンの .NET コレクション (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;
  }
}
于 2014-07-25T08:30:44.550 に答える