26.2 Den Wert einer Abhängigkeitseigenschaft bilden
Dependency Properties beziehen ihren Wert nicht ausschließlich aus einem vom WPF-Subsystem verwalteten Zentralspeicher. Der Wert einer Abhängigkeitseigenschaft kann auch aus einer Datenbindung stammen, beispielsweise aus einem Feld eines Datensatzes, aus einem Style oder einer Animation. Es kommen also mehrere potenzielle Quellen als Datengeber in Frage, die einer Abhängigkeitseigenschaft ihren endgültigen Wert »vorschreiben« – falls er nicht individuell für eine Komponente eingestellt wird.
Wenn es viele Faktoren gibt, aus denen der finale Eigenschaftswert gebildet wird, dann muss es auch eine Ablaufreihenfolge geben. Es handelt sich genau genommen um zwei Ablauflisten: Die erste bildet aus statischen Angaben zunächst einen sogenannten Basiswert, die zweite berücksichtigt darüber hinaus auch dynamische Einflüsse. Sehen wir uns als Erstes die Ablaufliste an, die den statischen Basiswert bildet:
- Der Standardwert der Abhängigkeitseigenschaft wird ausgewertet.
- Es wird geprüft, ob die Eigenschaft von einem übergeordneten Element im Elementbaum geerbt wird.
- Es wird geprüft, ob der Eigenschaftswert in einem Style vordefiniert ist (streng genommen müsste dieser Punkt sogar noch weiter unterteilt werden).
- Zuletzt wird nachgesehen, ob für das Element ein lokaler Wert gesetzt worden ist.
Diese Liste, die ihrerseits eine steigende Priorität widerspiegelt, wird von der WPF durchlaufen, um den Basiswert zu bilden. Dabei muss der Basiswert nicht zwangsläufig auch der finale Wert der Abhängigkeitseigenschaft sein, denn danach werden auch noch dynamische Einflüsse berücksichtigt:
- Es wird geprüft, ob Datenbindungen oder Ressourcen den Basiswert beeinflussen.
- Läuft aktuell eine Animation, könnte diese den Eigenschaftswert verändern.
- Der bis zu diesem Zeitpunkt gebildete Eigenschaftswert wird einem gegebenenfalls definierten ValidateValueCallback-Delegaten übergeben. Hier wird der Wert einer ganz allgemeinen Gültigkeitsüberprüfung unterzogen.
- Der letzte Schritt ist die Weiterleitung des Wertes an einen optional definierten CoerceValueCallback-Delegaten. Dieser überprüft, ob der bis zu diesem Punkt gebildete Eigenschaftswert im Kontext anderer Eigenschaften des gleichen Objekts als gültig angesehen werden kann.
Einige der in den beiden Listen aufgeführten Punkte sind Ihnen an dieser Stelle sicherlich noch nicht geläufig. Im Verlauf der weiteren Kapitel werden wir alle noch eingehend erläutern.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.