如何:创建和绑定到 ObservableCollection

更新:2007 年 11 月

本主题中的示例演示如何创建和绑定到派生自 ObservableCollection<T> 类的集合,该类是一个在添加或移除项时提供通知的集合类。

示例

下面的示例演示如何实现 NameList 集合:

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
public class NameList : ObservableCollection<PersonName>
{
    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; }
      }
  }

可以根据如何:使数据可用于 XAML 中的绑定中的说明,按照与其他公共语言运行时 (CLR) 对象相同的方式使集合可用于绑定。例如,可以在 XAML 中实例化该集合,并将该集合指定为一个资源,如下所示:

<Window
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:c="clr-namespace:SDKSample"
  x:Class="SDKSample.Window1"
  Width="400"
  Height="280"
  Title="MultiBinding Sample">
    
  <Window.Resources>
    <c:NameList x:Key="NameListData"/>


...


</Window.Resources>

然后可以绑定到该集合:

<ListBox Width="200"
         ItemsSource="{Binding Source={StaticResource NameListData}}"
         ItemTemplate="{StaticResource NameItemTemplate}"
         IsSynchronizedWithCurrentItem="True"/>

此处没有显示 NameItemTemplate 的定义。有关完整示例,请参见 实现参数化多重绑定的示例

说明:

集合中的对象必须满足绑定源概述中所述的要求。特别是,如果您使用 OneWayTwoWay(例如,您希望 UI 在源属性发生显著变化时进行更新),则必须实现一个适当的“属性已更改”通知机制,如 INotifyPropertyChanged 接口。

有关更多信息,请参见数据绑定概述中的“绑定到集合”一节。

请参见

任务

使用数据服务显示系统颜色的示例

绑定到集合的示例

如何:在视图中对数据进行排序

如何:筛选视图中的数据

如何:在 XAML 中使用视图对数据进行排序和分组

概念

数据绑定概述

其他资源

数据绑定示例

数据绑定帮助主题