ObservableCollection 및 일괄 수정
C#에서 ObservableCollection<T>
클래스는 컬렉션 항목의 변경 사항을 추적하고 변경 사항이 발생했음을 관찰자에게 알리는 방법을 제공합니다. 하지만 이 클래스는 AddRange
메서드를 지원하지 않습니다.
이 문제를 해결하려면 한 번에 여러 항목을 추가하는 것을 지원하는 고유한 ObservableRangeCollection
클래스를 구현할 수 있습니다. C# 7의 업데이트되고 최적화된 버전은 다음과 같습니다.
<code class="language-csharp">using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Collections.Specialized; public class ObservableRangeCollection<T> : ObservableCollection<T> { public void AddRange(IEnumerable<T> collection) { if (collection == null) throw new ArgumentNullException(nameof(collection)); foreach (var item in collection) Items.Add(item); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } public void RemoveRange(IEnumerable<T> collection) { if (collection == null) throw new ArgumentNullException(nameof(collection)); foreach (var item in collection) Items.Remove(item); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } public void Replace(T item) { ReplaceRange(new[] { item }); } public void ReplaceRange(IEnumerable<T> collection) { if (collection == null) throw new ArgumentNullException(nameof(collection)); Items.Clear(); foreach (var item in collection) Items.Add(item); OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)); } }</code>
이 구현을 사용하면 한 번의 작업으로 컬렉션에 여러 항목을 추가하거나 제거할 수 있으며 OnCollectionChanged
이벤트를 통해 관찰자에게 변경 사항을 알릴 수 있습니다.
컬렉션 수정 처리
컬렉션 수정이 발생하기 전에 처리하려면(예: 확인 대화 상자 표시) INotifyCollectionChanging
인터페이스
<code class="language-csharp">public interface INotifyCollectionChanging<T> { event NotifyCollectionChangingEventHandler<T> CollectionChanging; }</code>
<code class="language-csharp">public class ObservableRangeCollection<T> : ObservableCollection<T>, INotifyCollectionChanging<T> { // ... protected override void ClearItems() { var e = new NotifyCollectionChangingEventArgs<T>(NotifyCollectionChangedAction.Reset, Items); OnCollectionChanging(e); if (e.Cancel) return; base.ClearItems(); } // ... public event NotifyCollectionChangingEventHandler<T> CollectionChanging; protected virtual void OnCollectionChanging(NotifyCollectionChangingEventArgs<T> e) { CollectionChanging?.Invoke(this, e); } }</code>
이렇게 하면 CollectionChanging
이벤트를 처리하여 컬렉션 수정 작업을 취소하거나 수정할 수 있습니다.
위 내용은 C#의 ObservableCollection에서 항목 범위를 효율적으로 추가하고 제거하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!