Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

ObservableCollection<T>-Klasse

Aktualisiert: Juli 2008

Stellt eine dynamische Datenauflistung dar, die Benachrichtigungen bereitstellt, wenn Elemente hinzugefügt oder entfernt werden oder wenn die gesamte Liste aktualisiert wird.

Namespace:  System.Collections.ObjectModel
Assembly:  WindowsBase (in WindowsBase.dll)
XMLNS für XAML: Keinem xmlns zugeordnet.
[SerializableAttribute]
public class ObservableCollection<T> : Collection<T>, 
	INotifyCollectionChanged, INotifyPropertyChanged

J# unterstützt die Verwendung von generischen APIs, aber nicht die Deklaration von neuen generischen APIs.
JScript unterstützt keine generischen Typen oder Methoden.

                    Weitere Informationen finden Sie in den Hinweisen.
                

Typparameter

T

In vielen Fällen handelt es sich bei den Daten, die Sie verwenden, um eine Auflistung von Objekten. Ein übliches Szenario bei der Datenbindung besteht beispielsweise darin, ein ItemsControl zu verwenden, z. B. eine ListBox, eine ListView oder eine TreeView, um eine Auflistung von Datensätzen anzuzeigen.

Sie können jede Auflistung auflisten, die die IEnumerable-Schnittstelle implementiert. Um dynamische Bindungen einrichten zu können, damit die Benutzeroberfläche beim Einfügen oder Löschen in der Auflistung automatisch aktualisiert wird, muss die Auflistung die INotifyCollectionChanged-Schnittstelle implementieren. Diese Schnittstelle macht das CollectionChanged-Ereignis verfügbar, das bei jeder Änderung der zugrunde liegenden Auflistung ausgelöst werden sollte.

WPF stellt die ObservableCollection<T>-Klasse bereit, bei der es sich um eine integrierte Implementierung einer Datenauflistung handelt, die die INotifyCollectionChanged-Schnittstelle implementiert.

Statt eigene Auflistungen zu implementieren, können Sie auch ObservableCollection<T> oder eine der vorhandenen Auflistungsklassen verwenden, z. B. unter anderem List<T>, Collection<T> und BindingList<T>. Wenn Sie für ein erweitertes Szenario eine eigene Auflistung implementieren möchten, können Sie eine IList verwenden, die eine nicht generische Auflistung von Objekten bereitstellt, auf die jeweils über den Index zugegriffen werden kann. Durch die Implementierung von IList wird eine optimale Leistung mit dem Datenbindungsmodul erzielt.

ms668604.alert_note(de-de,VS.90).gif Hinweis:

Um eine vollständige Unterstützung für die Übertragung von Datenwerten von Bindungsquellen-Objekten an Bindungsziele bereitzustellen, muss jedes Objekt in der Auflistung, die bindbare Eigenschaften unterstützt, einen entsprechenden Benachrichtigungsmechanismus bei Eigenschaftenänderungen implementieren, z. B. die INotifyPropertyChanged-Schnittstelle.

Weitere Informationen finden Sie in Übersicht über Datenbindung unter Binden an Auflistungen.

Hinweise zur XAML-Verwendung

ObservableCollection<T> kann als XAML-Objektelement in Windows Presentation Foundation (WPF), in Version 3.0 und 3.5, verwendet werden. Für die Verwendung gelten jedoch erhebliche Einschränkungen.

  • ObservableCollection<T> muss das Stammelement sein, da das x:TypeArguments-Attribut, mit dem der eingeschränkte Typ der generischen ObservableCollection<T> angegeben werden muss, nur für das Objektelement für das Stammelement unterstützt wird.

  • Sie müssen ein x:Class-Attribut deklarieren (d. h. der Buildvorgang für diese XAML-Datei muss Page oder ein anderer Buildvorgang für die XAML-Kompilierung sein).

  • ObservableCollection<T> befindet sich in einem Namespace und einer Assembly, die anfänglich nicht dem Standard-XML-Namespace zugeordnet sind. Sie müssen ein Präfix für den Namespace und die Assembly zuordnen und dann das Präfix für das Objektelementtag für ObservableCollection<T> verwenden.

Eine einfachere Möglichkeit für die Verwendung von ObservableCollection<T>-Funktionen aus XAML in einer Anwendung ist das Deklarieren einer eigenen nicht generischen benutzerdefinierten Auflistungsklasse, die von ObservableCollection<T> abgeleitet ist und diese auf einen bestimmten Typ einschränkt. Ordnen Sie dann die Assembly zu, die diese Klasse enthält, und verweisen Sie darauf als Element in XAML.

Dieses Beispiel veranschaulicht, wie Sie eine Auflistung erstellen und eine Bindung an eine Auflistung herstellen, die von der ObservableCollection<T>-Klasse abgeleitet wird, die Benachrichtigungen bereitstellt, wenn Elemente hinzugefügt oder entfernt werden.

Im folgenden Codebeispiel wird die Implementierung einer NameList-Auflistung veranschaulicht.

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


Die Auflistung wird für die Bindung auf die gleiche Weise wie bei anderen common language runtime (CLR)-Objekten zur Verfügung gestellt. Informationen dazu finden Sie unter Gewusst wie: Bereitstellen von Daten, um diese in XAML zu binden. Sie können beispielsweise die Auflistung in XAML instanziieren und sie als Ressource, wie hier dargestellt, angeben:


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


Danach können Sie eine Bindung an die Auflistung erstellen.

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


Die Definition von NameItemTemplate wird an dieser Stelle nicht angezeigt. Das vollständige Beispiel finden Sie unter Beispiel für das Implementieren von parametrisierter MultiBinding.

ms668604.alert_note(de-de,VS.90).gif Hinweis:

Die Objekte in der Auflistung müssen die unter Übersicht über Bindungsquellen beschriebenen Anforderungen erfüllen. Insbesondere müssen Sie bei der Verwendung von OneWay oder TwoWay (wenn Sie z. B. Benutzeroberfläche dynamisch aktualisieren möchten, wenn sich die Quelleigenschaften ändern) einen geeigneten Benachrichtigungsmechanismus bei einer Eigenschaftenänderung, z. B. die INotifyPropertyChanged-Schnittstelle, implementieren.

Weitere Informationen finden Sie in Übersicht über Datenbindung unter Binden an Auflistungen.

System.Object
  System.Collections.ObjectModel.Collection<T>
    System.Collections.ObjectModel.ObservableCollection<T>
      System.Windows.Controls.GridViewColumnCollection
Alle öffentlichen static (Shared in Visual Basic)-Member dieses Typs sind threadsicher. Bei Instanzmembern ist die Threadsicherheit nicht gewährleistet.

Windows Vista

.NET Framework und .NET Compact Framework unterstützen nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.

.NET Framework

Unterstützt in: 3.5, 3.0

Datum

Versionsgeschichte

Grund

Juli 2008

Neuen Member hinzugefügt: ObservableCollection<T>-Konstruktor.

SP1-Featureänderung.

Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)
Community-Inhalt Hinzufügen
Anmerkungen FAQ