From 889a47db6d02b0913513b95bb4ad5962172ba47e Mon Sep 17 00:00:00 2001 From: Markus Ewald Date: Thu, 19 Mar 2009 19:34:11 +0000 Subject: [PATCH] Added new interface IObservableCollection which can be used to find out whether a collection can be observed, even if it is only published by its generic .NET interface git-svn-id: file:///srv/devel/repo-conversion/nusu@123 d2e56fa2-650e-0410-a79f-9358c0239efd --- Nuclex.Support (Xbox 360).csproj | 1 + Nuclex.Support.csproj | 1 + Source/Collections/IObservableCollection.cs | 47 +++++++++++++++++++++ Source/Collections/ObservableCollection.cs | 3 +- Source/Collections/ObservableDictionary.cs | 3 +- 5 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 Source/Collections/IObservableCollection.cs diff --git a/Nuclex.Support (Xbox 360).csproj b/Nuclex.Support (Xbox 360).csproj index ca11d6d..39811ff 100644 --- a/Nuclex.Support (Xbox 360).csproj +++ b/Nuclex.Support (Xbox 360).csproj @@ -69,6 +69,7 @@ AssertHelper.cs + ItemEventArgs.cs diff --git a/Nuclex.Support.csproj b/Nuclex.Support.csproj index 044e686..386c2d7 100644 --- a/Nuclex.Support.csproj +++ b/Nuclex.Support.csproj @@ -51,6 +51,7 @@ AssertHelper.cs + ItemEventArgs.cs diff --git a/Source/Collections/IObservableCollection.cs b/Source/Collections/IObservableCollection.cs new file mode 100644 index 0000000..51cc620 --- /dev/null +++ b/Source/Collections/IObservableCollection.cs @@ -0,0 +1,47 @@ +#region CPL License +/* +Nuclex Framework +Copyright (C) 2002-2009 Nuclex Development Labs + +This library is free software; you can redistribute it and/or +modify it under the terms of the IBM Common Public License as +published by the IBM Corporation; either version 1.0 of the +License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +IBM Common Public License for more details. + +You should have received a copy of the IBM Common Public +License along with this library +*/ +#endregion + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; + +namespace Nuclex.Support.Collections { + + /// Interface for collections that can be observed + /// Type of items managed in the collection + interface IObservableCollection { + + /// Raised when an item has been added to the collection + event EventHandler> ItemAdded; + + /// Raised when an item is removed from the collection + event EventHandler> ItemRemoved; + + /// Raised when the collection is about to be cleared + /// + /// This could be covered by calling ItemRemoved for each item currently + /// contained in the collection, but it is often simpler and more efficient + /// to process the clearing of the entire collection as a special operation. + /// + event EventHandler Clearing; + + } + +} // namespace Nuclex.Support.Collections diff --git a/Source/Collections/ObservableCollection.cs b/Source/Collections/ObservableCollection.cs index e8e6612..73f629e 100644 --- a/Source/Collections/ObservableCollection.cs +++ b/Source/Collections/ObservableCollection.cs @@ -25,7 +25,8 @@ using System.Collections.ObjectModel; namespace Nuclex.Support.Collections { /// Collection which fires events when items are added or removed - public class ObservableCollection : Collection { + public class ObservableCollection : + Collection, IObservableCollection { /// Raised when an item has been added to the collection public event EventHandler> ItemAdded; diff --git a/Source/Collections/ObservableDictionary.cs b/Source/Collections/ObservableDictionary.cs index efa8c68..402bd76 100644 --- a/Source/Collections/ObservableDictionary.cs +++ b/Source/Collections/ObservableDictionary.cs @@ -36,7 +36,8 @@ namespace Nuclex.Support.Collections { IDeserializationCallback, #endif IDictionary, - IDictionary { + IDictionary, + IObservableCollection> { #if !COMPACTFRAMEWORK #region class SerializedDictionary