ObservableCollection に欠けている AddRange 機能と回避策
.NET の標準の ObservableCollection
には、複数の項目を同時に追加するための AddRange
メソッドが含まれていません。この制限は、大規模なデータセットを扱う場合やコレクション全体を置き換える場合に面倒になる可能性があります。
カスタム ObservableRangeCollection の作成
これに対処するには、ObservableRangeCollection
を拡張し、必要な ObservableCollection
機能を組み込んだカスタム AddRange
クラスを構築します。 これを C# と VB.NET で実装する方法は次のとおりです:
C# 実装:
<code class="language-csharp">using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; namespace CustomCollections { 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)); } } }</code>
VB.NET 実装:
<code class="language-vb.net">Imports System.Collections.Generic Imports System.Collections.ObjectModel Imports System.ComponentModel Namespace CustomCollections Public Class ObservableRangeCollection(Of T) Inherits ObservableCollection(Of T) Public Sub AddRange(collection As IEnumerable(Of T)) If collection Is Nothing Then Throw New ArgumentNullException(NameOf(collection)) For Each item In collection Items.Add(item) Next OnCollectionChanged(New NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset)) End Sub End Class End Namespace</code>
カスタム コレクションの使用:
ObservableRangeCollection
クラスを作成した後は、標準の ObservableCollection
と同様に使用できますが、AddRange
メソッドが追加されています。
<code class="language-csharp">var myCollection = new ObservableRangeCollection<int>(); myCollection.AddRange(new[] { 1, 2, 3, 4, 5 });</code>
<code class="language-vb.net">Dim myCollection As New ObservableRangeCollection(Of Integer)() myCollection.AddRange({1, 2, 3, 4, 5})</code>
機能をさらに拡張
このカスタム コレクションは、RemoveRange
、Replace
、ReplaceRange
などのメソッドを追加することでさらに強化され、より包括的なコレクション管理機能を提供できます。
以上がObservableCollection に AddRange メソッドがないのはなぜですか? 追加するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。