CoerceValue sollte in der Tat verwendet werden, um einen Wert zu fixieren (begrenzen Sie ihn zum Beispiel zwischen min und max). Ich weiß nicht, ob das Auslösen einer Ausnahme die Anwendung zum Absturz bringen wird (Sie müssen es nur testen, um es herauszufinden) oder das Framework wird es handhaben, aber ich würde es sowieso nicht empfehlen, weil es gegen eine gute Programmierpraxis wäre.
Um zusätzliche Informationen für ValidateValue zu erhalten, müssen Sie manchmal einige zusätzliche Felder in Ihrer Klasse definieren. Sie können diese Felder entweder binden oder festlegen, bevor Sie einen Wert für Ihre DP festlegen. Anschließend können Sie in Ihrem ValidateValue auf diese Felder zugreifen und die erforderlichen zusätzlichen Informationen abrufen. Dieses zusätzliche Feld, das Informationen durch dazwischenliegende "Ebenen" erzeugt und weiterleitet, scheint von Microsoft in Ordnung zu sein, denn so haben sie (kurzsichtig) das Framework entworfen.
Ich werde Ihnen ein Beispiel für das neue WPF-Datagrid geben. Wenn Sie die Standardroute verwenden und eine RowValidationRule definieren, erwarten Sie Zugriff auf die ItemsSource (Ihre Tabelle), um festzustellen, ob ein bestimmter Wert in Ihrer Zeile bereits in der Tabelle vorhanden ist. Eine sehr standardmäßige Aufgabe, aber diese Information wird nicht im Bestätigungs-Callback bereitgestellt. Sie müssen also in Ihrer Validierungsklasse ein Feld erstellen, an das Sie die ItemsSource des DataGrids binden können. Dann können Sie während der Validierung auf dieses Feld zugreifen ...
zuerst: Es hat mich etwas überlegt, herauszufinden, dass DP Dependency Property bedeutet.
Zweitens: Soweit ich verstanden habe, geht es bei CoerceValueCallback darum, den Wert der Eigenschaft auf einen bestimmten Wert zu fixieren und nicht den Wert zu validieren. Daher würde ich ValidateValueCallback für die Validierung wählen. Wird das nicht trotzdem genannt?
Tags und Links wpf binding dependency-properties