
Auflösen von Datenbindungsverweisen
Bevor Leistungsfragen der Datenbindung erläutert werden, lohnt es sich zu untersuchen, wie das Windows Presentation Foundation (WPF)-Datenbindungsmodul Objektverweise für die Bindung auflöst.
Die Quelle einer Windows Presentation Foundation (WPF)-Datenbindung kann ein beliebiges CLR-Objekt sein. Die Bindung kann an Eigenschaften, Untereigenschaften oder Indexer eines CLR-Objekts erfolgen. Die Bindungsverweise werden mit Microsoft .NET Framework-Reflektion oder einem ICustomTypeDescriptor aufgelöst. Im Folgenden finden Sie drei Methoden zum Auflösen von Objektverweisen zur Bindung.
Die erste Methode verwendet dazu Reflektion. In diesem Fall werden mit dem PropertyInfo-Objekt die Attribute der Eigenschaft ermittelt. Dieses Objekt bietet auch Zugriff auf die Metadaten der Eigenschaft. Wenn die ICustomTypeDescriptor-Schnittstelle verwendet wird, greift das Datenbindungsmodul mithilfe dieser Schnittstelle auf die Eigenschaftenwerte zu. Die ICustomTypeDescriptor-Schnittstelle ist insbesondere in Fällen hilfreich, bei denen das Objekt nicht über einen statischen Eigenschaftensatz verfügt.
Benachrichtigungen über Eigenschaftenänderungen können durch Implementierung der INotifyPropertyChanged-Schnittstelle oder durch Verwendung der dem TypeDescriptor zugeordneten Änderungsbenachrichtigungen bereitgestellt werden. Die bevorzugte Strategie zur Implementierung von Benachrichtigungen über Eigenschaftenänderungen ist aber die Verwendung von INotifyPropertyChanged.
Wenn das Quellobjekt ein CLR-Objekt und die Quelleigenschaft eine CLR-Eigenschaft ist, muss das Windows Presentation Foundation (WPF)-Datenbindungsmodul für das Quellobjekt zuerst Reflektion verwenden, um den TypeDescriptor abzurufen, und dann einen PropertyDescriptor abfragen. Unter Leistungsaspekten ist diese Abfolge von Reflektionsvorgängen unter Umständen äußerst zeitaufwändig.
Die zweite Methode zum Auflösen von Objektverweisen verwendet ein CLR-Quellobjekt, das die INotifyPropertyChanged-Schnittstelle implementiert, und eine Quelleigenschaft, bei der es sich um eine CLR-Eigenschaft handelt. In diesem Fall verwendet das Datenbindungsmodul Reflektion direkt für den Quelltyp und ruft die benötigte Eigenschaft ab. Hierbei handelt es sich immer noch nicht um die optimale Methode, sie kommt aber mit weniger Anforderungen an das Workingset aus als die erste Methode.
Die dritte Methode zum Auflösen von Objektverweisen verwendet ein Quellobjekt, das ein DependencyObject ist, und eine Quelleigenschaft, die eine DependencyProperty ist. In diesem Fall muss das Datenbindungsmodul keine Reflektion verwenden. Stattdessen lösen das Eigenschaftenmodul und das Datenbindungsmodul den Eigenschaftenverweis unabhängig voneinander auf. Dies ist die optimale Methode zum Auflösen von Objektverweisen, die zur Datenbindung verwendet werden.
In der Tabelle unten wird die Geschwindigkeit der Datenbindung der Text-Eigenschaft von eintausend TextBlock-Elementen bei Verwendung der drei Methoden verglichen.
Binden der Text-Eigenschaft von TextBlock | Bindungszeit (ms) | Zeit zum Rendern - inklusive Bindung (ms) |
|---|
An eine Eigenschaft eines CLR-Objekts | 115 | 314 |
An eine Eigenschaft eines CLR-Objekts, das INotifyPropertyChanged implementiert | 115 | 305 |
An eine DependencyProperty von einem DependencyObject. | 90 | 263 |