Galileo Computing < openbook > Galileo Computing - Professionelle Bücher. Auch für Einsteiger.
Professionelle Bücher. Auch für Einsteiger.

Inhaltsverzeichnis
Vorwort zur 6. Auflage
1 Allgemeine Einführung in .NET
2 Grundlagen der Sprache C#
3 Das Klassendesign
4 Vererbung, Polymorphie und Interfaces
5 Delegates und Ereignisse
6 Strukturen und Enumerationen
7 Fehlerbehandlung und Debugging
8 Auflistungsklassen (Collections)
9 Generics – Generische Datentypen
10 Weitere C#-Sprachfeatures
11 LINQ
12 Arbeiten mit Dateien und Streams
13 Binäre Serialisierung
14 XML
15 Multithreading und die Task Parallel Library (TPL)
16 Einige wichtige .NET-Klassen
17 Projektmanagement und Visual Studio 2012
18 Einführung in die WPF und XAML
19 WPF-Layout-Container
20 Fenster in der WPF
21 WPF-Steuerelemente
22 Elementbindungen
23 Konzepte von WPF
24 Datenbindung
25 Weitere Möglichkeiten der Datenbindung
26 Dependency Properties
27 Ereignisse in der WPF
28 WPF-Commands
29 Benutzerdefinierte Controls
30 2D-Grafik
31 ADO.NET – Verbindungsorientierte Objekte
32 ADO.NET – Das Command-Objekt
33 ADO.NET – Der SqlDataAdapter
34 ADO.NET – Daten im lokalen Speicher
35 ADO.NET – Aktualisieren der Datenbank
36 Stark typisierte DataSets
37 Einführung in das ADO.NET Entity Framework
38 Datenabfragen des Entity Data Models (EDM)
39 Entitätsaktualisierung und Zustandsverwaltung
40 Konflikte behandeln
41 Plain Old CLR Objects (POCOs)
Stichwort

Download:
- Beispiele, ca. 62,4 MB

Buch bestellen
Ihre Meinung?

Spacer
Visual C# 2012 von Andreas Kühnel
Das umfassende Handbuch
Buch: Visual C# 2012

Visual C# 2012
Rheinwerk Computing
1402 S., 6., aktualisierte und erweiterte Auflage 2013, geb., mit DVD
49,90 Euro, ISBN 978-3-8362-1997-6
Pfeil 26 Dependency Properties
Pfeil 26.1 Die Charakteristik von Abhängigkeitseigenschaften
Pfeil 26.2 Den Wert einer Abhängigkeitseigenschaft bilden
Pfeil 26.3 Definition einer Dependency Property
Pfeil 26.3.1 Registrieren einer Abhängigkeitseigenschaft
Pfeil 26.3.2 Der Eigenschaftswrapper
Pfeil 26.3.3 Die Eigenschaftsmetadaten
Pfeil 26.3.4 Freigabe des spezifischen Eigenschaftswertes
Pfeil 26.3.5 Vererbung von Abhängigkeitseigenschaften
Pfeil 26.4 Validieren einer Abhängigkeitseigenschaft
Pfeil 26.4.1 Validieren mit »ValidateValueCallback«
Pfeil 26.4.2 Validieren mit »CoerceValueCallback«
Pfeil 26.5 Angehängte Eigenschaften (Attached Property)
Pfeil 26.5.1 Angehängte Eigenschaften zur Laufzeit ändern

Galileo Computing - Zum Seitenanfang

26.4 Validieren einer AbhängigkeitseigenschaftZur nächsten Überschrift

Nun müssen wir noch auf einen ausgesprochen wichtigen Punkt zu sprechen kommen. Bei der Definition von CLR-Eigenschaften haben wir bisher immer die set- und get-Zweige dazu benutzt, Überprüfungen im Zusammenhang mit der Wertübergabe oder der Auswertung vorzunehmen oder möglicherweise Ereignisse auszulösen. Von diesem allgemeinen Prinzip sollten Sie beim Wrapper einer Abhängigkeitseigenschaft grundsätzlich immer Abstand nehmen. Stattdessen bieten sich uns mit den Delegaten ValidateValueCallback und CoerceValueCallback Alternativen an, die die Aufgabe der Validierung übernehmen.


Galileo Computing - Zum Seitenanfang

26.4.1 Validieren mit »ValidateValueCallback«Zur nächsten ÜberschriftZur vorigen Überschrift

Dieser Delegat kann den neuen Eigenschaftswert ganz allgemein entweder akzeptieren oder verwerfen, repräsentiert also einen Boolean. Er ersetzt die Überprüfung des Wertes, die bei herkömmlichen CLR-Eigenschaften normalerweise im set-Zweig erfolgt.

Der ValidateValueCallback-Delegat hat prinzipiell dieselbe Aufgabe wie der noch zu diskutierende CoerceValueCallback-Delegat. Bei der Validierung hat der ValidateValueCallback-Delegat jedoch keine Kenntnis vom Objekt selbst. Daher wird der Delegat immer dann eingesetzt, wenn eine Überprüfung allgemeingültig ist, also für jedes Objekt die gleichen Bedingungen angesetzt werden können. Objekteigenschaften können zur Validierung des neuen Wertes nicht herangezogen werden. Hinsichtlich unserer Klasse Circle wäre es zum Beispiel naheliegend, sicherzustellen, dass der Radius nicht kleiner 0 sein darf.

Die Bekanntgabe des ValidateValueCallback-Delegaten erfolgt als Argumentübergabe an die Register-Methode der Klasse DependencyProperty.

RadiusProperty = DependencyProperty.Register("Radius", typeof(int),           
typeof(Circle), meta,
new ValidateValueCallback(IsRadiusValid));

Listing 26.12 Validieren einer Dependency Property

Die auf den Delegaten beruhende Rückrufmethode erwartet als einziges Argument den Wert, den es zu überprüfen gilt. Die Übergabe des zu prüfenden Wertes erfolgt an einen Parameter vom Typ Object und muss demnach innerhalb der validierenden Methode in den passenden Datentyp konvertiert werden. Der Rückgabewert ist true, wenn der Wert akzeptiert werden kann, ansonsten false.

private static bool IsRadiusValid(object value) {
if ((int)value >= 0) return true;
return false;
}

Listing 26.13 Die Definition der Rückrufmethode

Die Rückgabe von false löst eine Ausnahme aus, die behandelt werden muss.


Galileo Computing - Zum Seitenanfang

26.4.2 Validieren mit »CoerceValueCallback«Zur vorigen Überschrift

Der Delegat CoerceValueCallback wird dazu benutzt, festzustellen, ob der bis zu diesem Zeitpunkt gebildete neue Eigenschaftswert im Kontext anderer Objekteigenschaften als gültig angesehen werden kann. Nehmen wir dazu das typische Beispiel eines ProgressBar-Steuerelements (Fortschrittsbalken). Mit den Werten Minimum und Maximum werden die Bereichsgrenzen abgesteckt, mit Value der aktuelle Wert. Überschreitet Value den von Maximum definierten Grenzwert, kann das nicht akzeptiert werden. Andererseits darf Value auch die Einstellung von Minimum nicht unterschreiten. Zur Vermeidung dieser Inkonsistenz eignet sich der CoerceValueCallback-Delegat.

Der Delegat beschreibt eine Methode mit zwei Parametern. Der erste liefert dabei die Referenz auf das Objekt, für das der Eigenschaftswert geprüft werden soll. Dabei muss es sich um ein Objekt vom Typ DependencyObject handeln. Der zweite Parameter ist der zu validierende Wert. Der Rückgabewert ist vom Typ Object und beschreibt den eventuell umgewandelten, akzeptablen Eigenschaftswert.

Ein CoerceValueCallback-Delegat wird über die gleichnamige Eigenschaft des PropertyMetadata-Objekts definiert (siehe auch Tabelle 26.1), beispielsweise folgendermaßen:

FrameworkPropertyMetadata meta = new FrameworkPropertyMetadata(...);
meta.CoerceValueCallback = new CoerceValueCallback(CoerceRadius);

Listing 26.14 Definition des »CoerceValueCallback«-Delegaten

Nehmen wir an, in der Klasse Circle wäre noch eine CLR-Eigenschaft Maximum definiert, die den maximalen Radius eines Circle-Objekts festschreiben soll. In diesem Fall dürfte der Wert des Radius den vorgegebenen Maximalwert nicht überschreiten. Da die Eigenschaft Maximum für jedes Objekt unterschiedlich sein kann, muss eine Validierung gegen den objektspezifischen Wert durchgeführt werden.

private static object CoerceRadius(DependencyObject d, object value) {
if (((Circle)d).Maximum >= (int)value)
return value;
return ((Circle)d).Maximum;
}

Listing 26.15 Prüfen gegen eine objektspezifische Eigenschaft

Es würde sich auch hinsichtlich der Eigenschaft Maximum anbieten, diese als Abhängigkeitseigenschaft zu implementieren. Um den Code überschaubar zu halten, wird die Eigenschaft als normale CLR-Property angegeben.

Den kompletten Code der Klasse Circle finden Sie auf der Buch-DVD unter ..\Beispiel\Kapitel 26\DependencyPropertySample.



Ihr Kommentar

Wie hat Ihnen das <openbook> gefallen? Wir freuen uns immer über Ihre freundlichen und kritischen Rückmeldungen.

>> Zum Feedback-Formular
<< zurück
  Zum Katalog
Zum Katalog: Visual C# 2012

Visual C# 2012
Jetzt bestellen


 Ihre Meinung?
Wie hat Ihnen das <openbook> gefallen?
Ihre Meinung

 Buchempfehlungen
Zum Katalog: Professionell entwickeln mit Visual C# 2012






 Professionell
 entwickeln mit
 Visual C# 2012


Zum Katalog: Windows Presentation Foundation






 Windows Presentation
 Foundation


Zum Katalog: Schrödinger programmiert C++






 Schrödinger
 programmiert C++


Zum Katalog: C++ Handbuch






 C++ Handbuch


Zum Katalog: C/C++






 C/C++


 Shopping
Versandkostenfrei bestellen in Deutschland und Österreich
InfoInfo





Copyright © Rheinwerk Verlag GmbH 2013
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das <openbook> denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.


[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de