実装するインターフェイスはINotifyCollectionChangedです。このインターフェイスは、WPFバインディングとCollectionChangedイベントを介して通信します。このイベントの引数(NotifyCollectionChangedEventArgs)は、変更されたアイテムのバッチをレポートできます。
これを行う1つの方法は、独自のMyBatchObservableCollecitonを実装して、List(またはその他の適切なコレクション)を派生させるか、(より適切に)組み込むことです。インナーコレクションを変更し、これらの変更をすべて記録するメソッドを実装します。すべての変更をWPFにコミットする準備ができたら、変更のリストを送信してください。ここでは、(あなたのコレクションにfuncitonalityを「追加」のみ実装)行うことができます何のサブセット例です。
class BatchObservableColleciton<T> : INotifyCollectionChanged, IEnumerable
{
public event NotifyCollectionChangedEventHandler CollectionChanged;
private List<T> _list;
private List<T> _addedItems;
public BatchObservableColleciton() {
_list = new List<T>();
_addedItems = new List<T>();
}
public IEnumerator GetEnumerator()
{
return _list.GetEnumerator();
}
public void Add(T item)
{
_list.Add(item);
_addedItems.Add(item);
}
public void commit() {
if(CollectionChanged != null) {
CollectionChanged(this, new NotifyCollectionChangedEventArgs(
NotifyCollectionChangedAction.Add, _addedItems));
}
_addedItems.Clear();
}
}
はそれを自分自身を試したことはありませんが、私はこれは移動するための方法だと思います。 Google for Custom & ObservableCollection。正確ではありませんが、そこには実装がほとんどありません。
出典
2012-02-16 08:29:14
Uri
これは間違った答えです。 IEnumerableに加えて、INotifyCollectionChangedを実装する必要があります。 – Uri
いいえ、動作します。追加/削除するたびにChartDataCollectionプロパティをチャートデータソースにリセットする必要があります。 –
@Uri INotifyCollectionChangedは、OPが持つ問題を表示します。ソリューションが機能している間、それは過度にアーキテクチャされています。私のソリューションは機能し、簡単です。 –