This topic has not yet been rated - Rate this topic

ReadOnlyObservableCollection<T> Class

Updated: July 2010

Represents a read-only ObservableCollection<T>.

System.Object
  System.Collections.ObjectModel.ReadOnlyCollection<T>
    System.Collections.ObjectModel.ReadOnlyObservableCollection<T>

Namespace:  System.Collections.ObjectModel
Assembly:  System (in System.dll)
[SerializableAttribute]
public class ReadOnlyObservableCollection<T> : ReadOnlyCollection<T>, 
	INotifyCollectionChanged, INotifyPropertyChanged

Type Parameters

T

The type of elements in the collection.

The ReadOnlyObservableCollection<T> type exposes the following members.

  Name Description
Public method ReadOnlyObservableCollection<T> Initializes a new instance of the ReadOnlyObservableCollection<T> class that serves as a wrapper around the specified ObservableCollection<T>.
Top
  Name Description
Public property Count Gets the number of elements contained in the ReadOnlyCollection<T> instance. (Inherited from ReadOnlyCollection<T>.)
Public property Item Gets the element at the specified index. (Inherited from ReadOnlyCollection<T>.)
Protected property Items Returns the IList<T> that the ReadOnlyCollection<T> wraps. (Inherited from ReadOnlyCollection<T>.)
Top
  Name Description
Public method Contains Determines whether an element is in the ReadOnlyCollection<T>. (Inherited from ReadOnlyCollection<T>.)
Public method CopyTo Copies the entire ReadOnlyCollection<T> to a compatible one-dimensional Array, starting at the specified index of the target array. (Inherited from ReadOnlyCollection<T>.)
Public method Equals(Object) Determines whether the specified Object is equal to the current Object. (Inherited from Object.)
Protected method Finalize Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (Inherited from Object.)
Public method GetEnumerator Returns an enumerator that iterates through the ReadOnlyCollection<T>. (Inherited from ReadOnlyCollection<T>.)
Public method GetHashCode Serves as a hash function for a particular type. (Inherited from Object.)
Public method GetType Gets the Type of the current instance. (Inherited from Object.)
Public method IndexOf Searches for the specified object and returns the zero-based index of the first occurrence within the entire ReadOnlyCollection<T>. (Inherited from ReadOnlyCollection<T>.)
Protected method MemberwiseClone Creates a shallow copy of the current Object. (Inherited from Object.)
Protected method OnCollectionChanged Raises the CollectionChanged event using the provided arguments.
Protected method OnPropertyChanged Raises the PropertyChanged event using the provided arguments.
Public method ToString Returns a string that represents the current object. (Inherited from Object.)
Top
  Name Description
Protected event CollectionChanged Occurs when an item is added or removed.
Protected event PropertyChanged Occurs when a property value changes.
Top
  Name Description
Explicit interface implemetation Private method ICollection<T>.Add Adds an item to the ICollection<T>. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method ICollection<T>.Clear Removes all items from the ICollection<T>. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method ICollection.CopyTo Copies the elements of the ICollection to an Array, starting at a particular Array index. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property ICollection<T>.IsReadOnly Gets a value indicating whether the ICollection<T> is read-only. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property ICollection.IsSynchronized Gets a value indicating whether access to the ICollection is synchronized (thread safe). (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method ICollection<T>.Remove Removes the first occurrence of a specific object from the ICollection<T>. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property ICollection.SyncRoot Gets an object that can be used to synchronize access to the ICollection. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IEnumerable.GetEnumerator Returns an enumerator that iterates through a collection. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.Add Adds an item to the IList. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.Clear Removes all items from the IList. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.Contains Determines whether the IList contains a specific value. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.IndexOf Determines the index of a specific item in the IList. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList<T>.Insert Inserts an item to the IList<T> at the specified index. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.Insert Inserts an item to the IList at the specified index. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property IList.IsFixedSize Gets a value indicating whether the IList has a fixed size. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property IList.IsReadOnly Gets a value indicating whether the IList is read-only. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property IList<T>.Item Gets or sets the element at the specified index. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private property IList.Item Gets or sets the element at the specified index. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.Remove Removes the first occurrence of a specific object from the IList. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList<T>.RemoveAt Removes the IList<T> item at the specified index. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private method IList.RemoveAt Removes the IList item at the specified index. This implementation always throws NotSupportedException. (Inherited from ReadOnlyCollection<T>.)
Explicit interface implemetation Private event INotifyCollectionChanged.CollectionChanged Occurs when the collection changes.
Explicit interface implemetation Private event INotifyPropertyChanged.PropertyChanged Occurs when a property value changes.
Top

This class is a read-only wrapper around an ObservableCollection<T>. If changes are made to the underlying collection, the ReadOnlyObservableCollection<T> reflects those changes. To be notified of the changes to this class, subscribe to the INotifyCollectionChanged.CollectionChanged or INotifyPropertyChanged.PropertyChanged event.

.NET Framework

Supported in: 4, 3.5, 3.0

.NET Framework Client Profile

Supported in: 4, 3.5 SP1

Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core not supported), Windows Server 2008 R2 (Server Core supported with SP1 or later), Windows Server 2003 SP2

The .NET Framework does not support all versions of every platform. For a list of the supported versions, see .NET Framework System Requirements.
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Date

History

Reason

July 2010

Expanded remarks to discuss subscribing to explicit interface events..

Customer feedback.

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Why is the CollectionChanged protected?
After about 2 years of developer confusion documented all over google, I think we deserve a real answer to this. Why is the CollectionChanged event protected? Does one of your developers have the balls to post a reason for this or are you guy just insane?  $0Do you think this is the way C# code should look?: $0 $0((INotifyCollectionChanged)DataModel.Instance.TrackManager.CurrentFrameTracks).CollectionChanged += new NotifyCollectionChangedEventHandler(WFovForm_CollectionChanged);$0 $0$0 $0 $0You guys have some great design principals but making us put in code like that breaks them. Please explain this design decision in detail.$0 $0$0 $0
Wrong Assembly - At least for my 3.5 Project

Referencing System.dll did not resolve this type, I had to include WindowsBase.dll instead. Just noting this here if anyone else has trouble with it.

How do you observe this collection?
You can observe this collection by casting it to INotifyPropertyChanged or INotifyCollectionChanged and then subscribing to the appropriate event.
How do you observe this collection?
Since this class is virtually undocumented it is not clear to me how you actually observe this collection. $0I have tried a WPF binding which worked fine, but why are CollectionChanged and PropertyChanged protected?$0 $0It is hard to see why public change events would conflict with the read only preservation of the class.$0 $0$0 $0