--- title: "How to: Create and Bind to an ObservableCollection" description: Find out how to create and bind to a collection that derives from the ObservableCollection class in Windows Presentation Foundation. ms.date: "03/30/2017" dev_langs: - "csharp" - "vb" helpviewer_keywords: - "data binding [WPF], ObservableCollection class" - "notifications [WPF]" ms.assetid: 6cf7e275-df76-41c6-a611-53b889b8fd5a --- # How to: Create and Bind to an ObservableCollection This example shows how to create and bind to a collection that derives from the class, which is a collection class that provides notifications when items get added or removed. ## Example The following example shows the implementation of a `NameList` collection: ```csharp public class NameList : ObservableCollection { public NameList() : base() { Add(new PersonName("Willa", "Cather")); Add(new PersonName("Isak", "Dinesen")); Add(new PersonName("Victor", "Hugo")); Add(new PersonName("Jules", "Verne")); } } public class PersonName { private string firstName; private string lastName; public PersonName(string first, string last) { this.firstName = first; this.lastName = last; } public string FirstName { get { return firstName; } set { firstName = value; } } public string LastName { get { return lastName; } set { lastName = value; } } } ``` ```vb Public Class NameList Inherits ObservableCollection(Of PersonName) ' Methods Public Sub New() MyBase.Add(New PersonName("Willa", "Cather")) MyBase.Add(New PersonName("Isak", "Dinesen")) MyBase.Add(New PersonName("Victor", "Hugo")) MyBase.Add(New PersonName("Jules", "Verne")) End Sub End Class Public Class PersonName ' Methods Public Sub New(ByVal first As String, ByVal last As String) Me._firstName = first Me._lastName = last End Sub ' Properties Public Property FirstName() As String Get Return Me._firstName End Get Set(ByVal value As String) Me._firstName = value End Set End Property Public Property LastName() As String Get Return Me._lastName End Get Set(ByVal value As String) Me._lastName = value End Set End Property ' Fields Private _firstName As String Private _lastName As String End Class ``` You can make the collection available for binding the same way you would with other common language runtime (CLR) objects, as described in [Make Data Available for Binding in XAML](how-to-make-data-available-for-binding-in-xaml.md). For example, you can instantiate the collection in [!INCLUDE[TLA2#tla_xaml](../../../includes/tla2sharptla-xaml-md.md)] and specify the collection as a resource, as shown here: ```xaml ... ``` You can then bind to the collection: ```xaml ``` The definition of `NameItemTemplate` is not shown here. > [!NOTE] > The objects in your collection must satisfy the requirements described in the [Binding Sources Overview](binding-sources-overview.md). In particular, if you are using or (for example, you want your [!INCLUDE[TLA2#tla_ui](../../../includes/tla2sharptla-ui-md.md)] to update when the source properties change dynamically), you must implement a suitable property changed notification mechanism such as the interface. For more information, see the Binding to Collections section in the [Data Binding Overview](/dotnet/desktop-wpf/data/data-binding-overview). ## See also - [Sort Data in a View](how-to-sort-data-in-a-view.md) - [Filter Data in a View](how-to-filter-data-in-a-view.md) - [Sort and Group Data Using a View in XAML](how-to-sort-and-group-data-using-a-view-in-xaml.md) - [Data Binding Overview](/dotnet/desktop-wpf/data/data-binding-overview) - [How-to Topics](data-binding-how-to-topics.md)