コメントにするには投稿が長すぎるため、回答としてここにあります。Ananthonline
が投稿した
ように、ObservableCollection をサブクラス化できます。
しかし、残念ながら、それは作業の半分に過ぎません。その理由は、コレクションがアイテム コントロールのアイテム ソースとしてバインドされるコレクション ビューを暗黙的に使用するためです。
また、WPF のすべての既定のコレクション ビューの基本型として使用されるCollectionViewは、バッチ コレクションの更新をサポートしていません。
private void ValidateCollectionChangedEventArgs(NotifyCollectionChangedEventArgs e)
{
switch (e.Action)
{
case NotifyCollectionChangedAction.Add:
{
if (e.NewItems.Count != 1)
{
throw new NotSupportedException(SR.Get("RangeActionsNotSupported"));
}
break;
}
case NotifyCollectionChangedAction.Remove:
{
if (e.OldItems.Count != 1)
{
throw new NotSupportedException(SR.Get("RangeActionsNotSupported"));
}
if (e.OldStartingIndex < 0)
{
throw new InvalidOperationException(SR.Get("RemovedItemNotFound"));
}
break;
}
case NotifyCollectionChangedAction.Replace:
{
if (e.NewItems.Count != 1 || e.OldItems.Count != 1)
{
throw new NotSupportedException(SR.Get("RangeActionsNotSupported"));
}
break;
}
case NotifyCollectionChangedAction.Move:
{
if (e.NewItems.Count != 1)
{
throw new NotSupportedException(SR.Get("RangeActionsNotSupported"));
}
if (e.NewStartingIndex < 0)
{
throw new InvalidOperationException(SR.Get("CannotMoveToUnknownPosition"));
}
break;
}
case NotifyCollectionChangedAction.Reset:
{
break;
}
default:
{
throw new NotSupportedException(SR.Get("UnexpectedCollectionChangeAction", new object[]
{
e.Action
}));
}
}
}
...そして、ICollectionView を実装する必要があります。これが正しい方法かどうかはわかりません。