Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menambah dan Mengalih Keluar Julat Item dengan Cekap daripada ObservableCollection dalam C#?

Bagaimanakah Saya Boleh Menambah dan Mengalih Keluar Julat Item dengan Cekap daripada ObservableCollection dalam C#?

Patricia Arquette
Patricia Arquetteasal
2025-01-20 07:01:09338semak imbas

How Can I Efficiently Add and Remove Ranges of Items from an ObservableCollection in C#?

ObservableCollection dan pengubahsuaian kelompok

Dalam C#, kelas ObservableCollection<T> menyediakan cara untuk menjejaki perubahan pada item koleksi dan memberitahu pemerhati bahawa perubahan berlaku. Walau bagaimanapun, kelas ini tidak menyokong kaedah AddRange.

Untuk menyelesaikan masalah ini, anda boleh melaksanakan kelas ObservableRangeCollection anda sendiri, yang menyokong penambahan berbilang item sekaligus. Berikut ialah versi yang dikemas kini dan dioptimumkan dalam 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>

Pelaksanaan ini membolehkan anda menambah atau mengalih keluar berbilang item pada koleksi dalam satu operasi, dan ia akan memberitahu pemerhati tentang perubahan melalui acara OnCollectionChanged.

Mengendalikan pengubahsuaian koleksi

Jika anda ingin mengendalikan pengubahsuaian koleksi sebelum ia berlaku (contohnya, tunjukkan dialog pengesahan), anda boleh melaksanakan INotifyCollectionChangingantara muka:

<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>

Dengan cara ini anda boleh mengendalikan acara CollectionChanging untuk membatalkan atau mengubah suai operasi pengubahsuaian koleksi.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menambah dan Mengalih Keluar Julat Item dengan Cekap daripada ObservableCollection dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn