2016-05-31 8 views
1

Ich habe eine Eigenschaft Callback geändert und darin muss ich einige Validierung durchführen.DependencyObject.SetValue vs Cast und Set-Eigenschaft

Ich nehme einen neuen Wert und validiere ihn anhand einer Reihe weiterer Eigenschaftskriterien wie Min- und Max-Werte.

Um dies zu tun, ich entweder das Abhängigkeitsobjekt aus dem geändertenen Ereignisse in Anspruch nehmen bin die Planung und

DependencyObject.SetValue(TargetProperty,NewValue); 

verwenden oder es auf eine Variable gegossen und die Eigenschaften direkt ist

ObjectType myObjectType = (ObjectType)DependencyObject; 
myObjectType.Target=NewValue; 

Meine Frage verwenden Was wären die Gründe für die Verwendung beider Methoden gegenüber der anderen? Würden Castings mehr Ressourcen beanspruchen, als viele SetValue/GetValue-Lookups sagen? Ich werde in den Methoden bis zu 10 Mal auf Eigenschaften verweisen.

Vielen Dank.

+0

Ich würde [zu diesem MS-Link] (https://msdn.microsoft.com/en-us/library/ms752914) über DP und wie man sie schreibt. Ich kann keinen Grund sehen, sie so zu schreiben, wie du es getan hast ... –

Antwort

1

Die Standardimplementierung einer Abhängigkeitseigenschaft in einer DependencyObject ist SetValue() zu rufen. Außerdem ist das Gießen gerade in diesem Zusammenhang spottbillig. Es gibt also keinen praktischen Unterschied zwischen den beiden Ansätzen.

Für mich würde es zu dem Teil der Operation kommen, die Sie konzentrieren möchten. Wenn Sie wollen, dass Ihre Implementierung eng mit der Tatsache verbunden ist, dass das Objekt tatsächlich ein DependencyObject ist, kann ich nicht viel Grund sehen, um SetValue() direkt zu rufen. Das macht WPF.

Wenn Sie möchten, dass der Code mehr C# -ähnlich ist und den normalen Eigenschaften-Idiomen folgt, wird das Umwandeln in den richtigen Typ und das direkte Festlegen der Eigenschaft lesbarer und wartbarer. Ja, es fügt die zusätzlichen Operationen des Castings hinzu und ruft dann den Property Setter auf. Aber das sind vernachlässigbare Kosten, praktisch unermesslich. Und im Gegenzug erhalten Sie Code, der keine bestimmte Implementierung der Eigenschaft voraussetzt.