ObservableCollection에 대해 질문 드립니다

대분류를 선택하면 DB에서 불러와 소분류, 본문을 출력되는 기능을 구현하려 합니다.
그러려면 ObservableCollection에 요소를 제거하고 하나하나 넣어야 하는데, 넣을 때마다 CollectionChanged 이벤트가 발생하는 문제가 있습니다.
요소를 모두 넣은 후 출력되게 하는 다른 방법이 있을까요?

3개의 좋아요

이런 식으로 ObservableCollection를 재정의 하시면 됩니다.
AddRange와 비슷한 논리로 삭제도 구현하시면 됩니다.

using System.Collections;
using System.Collections.ObjectModel;
using System.Collections.Specialized;

CustomObservableCollection<int> list = new();
list.CollectionChanged += (s, e) =>
{
    Console.WriteLine(e.NewItems?.Count ?? 0);
};

list.Add(1);
list.Add(2);
list.Add(3);

list.AddRange(new[] { 4, 5, 6 });

public class CustomObservableCollection<T> : ObservableCollection<T>
{
    public void AddRange(IList<T> list)
    {
        foreach (var item in list)
            Items.Add(item);

        OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, list as IList));
    }
}

| 출력결과

1
1
1
3
7개의 좋아요

감사합니다!

2개의 좋아요