Freigeben über


Vorgehensweise: Erstellen und Binden an eine Observable Collection

In diesem Beispiel wird gezeigt, wie Sie eine Auflistung erstellen und binden, die von der ObservableCollection<T> Klasse abgeleitet ist. Dabei handelt es sich um eine Sammlungsklasse, die Benachrichtigungen bereitstellt, wenn Elemente hinzugefügt oder entfernt werden.

Beispiel

Das folgende Beispiel zeigt die Implementierung einer NameList Auflistung:

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; }
      }
  }
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

Sie können die Sammlung für die Bindung auf die gleiche Weise wie bei anderen CLR-Objekten (Common Language Runtime) verfügbar machen, wie unter "Daten verfügbar für die Bindung in XAML" beschrieben. Sie können beispielsweise die Auflistung in XAML instanziieren und die Sammlung als Ressource angeben, wie hier gezeigt:

<Window
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://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>

Anschließend können Sie eine Bindung an die Sammlung herstellen:

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

Die Definition von NameItemTemplate ist hier nicht dargestellt.

Hinweis

Die Objekte in Ihrer Auflistung müssen die anforderungen erfüllen, die in der Übersicht über Bindungsquellen beschrieben sind. Insbesondere wenn Sie OneWay oder TwoWay verwenden (z. B. wenn Sie möchten, dass Ihre Benutzeroberfläche aktualisiert wird, sobald sich die Eigenschaften der Quelle dynamisch ändern), müssen Sie einen geeigneten Benachrichtigungsmechanismus für Änderungen an Eigenschaften, wie beispielsweise die INotifyPropertyChanged Schnittstelle, implementieren.

Weitere Informationen finden Sie im Abschnitt "Bindung an Sammlungen" in der Übersicht über die Datenbindung.

Siehe auch