Wie funktioniert FallbackValue mit einem MultiBinding?

8

Ich frage, weil es nicht zu funktionieren scheint.

Angenommen, wir binden uns an das folgende Objekt:

%Vor%

Nun, es sieht so aus, als ob wir bei Verwendung eines MultiBinding den Fallback-Wert anzeigen würden, richtig?

%Vor%

Allerdings ist das Ergebnis in der Tat "zum" . Selbst wenn die Bindungen gezwungen werden, DependencyProperty.UnsetValue zurückzugeben, funktioniert das nicht:

%Vor%

Dasselbe wurde mit TargetNullValue versucht, was auch eine Pleite war.

Es scheint also, dass MultiBinding niemals FallbackValue verwenden wird. Ist das wahr, oder fehlt mir etwas?

Ein bisschen mehr Herumalbern und ich habe festgestellt, dass ein Konverter den UnsetValue zurückgeben kann, den ich brauche:

%Vor%

Allerdings scheint das ein schmutziger, schmutziger Hack zu sein. Ich würde denken, dass ein Szenario wie dieses im Rahmen berücksichtigt würde. Ich kann jedoch nichts in Reflector finden.

    
Will 19.04.2010, 16:11
quelle

1 Antwort

7

Dies ist ein bisschen eine alte Frage, aber es könnte eine Erklärung verwenden.

Aus der FallbackValue-Dokumentation :

  

Eine Bindung gibt einen Wert erfolgreich zurück, wenn:

     
  1. Der Pfad zur Bindungsquelle wird erfolgreich aufgelöst.
  2.   
  3. Der Wertkonverter, falls vorhanden, kann den resultierenden Wert konvertieren.
  4.   
  5. Der resultierende Wert ist für die Zieleigenschaft binding target (Ziel) gültig.
  6.   

Wenn 1 und 2 DependencyProperty.UnsetValue zurückgeben, wird die Zieleigenschaft zurückgegeben   wird auf den Wert des FallbackValue gesetzt, falls einer verfügbar ist. Ob   Es gibt keinen FallbackValue, der Standardwert der Zieleigenschaft ist   verwendet.

In dem angegebenen Beispiel wird die Bindung erfolgreich in den Eigenschaften Hurr und Durr aufgelöst. Null ist ein gültiger Wert für eine Zeichenfolge, was bedeutet, dass die Bindung gültig ist.

Mit anderen Worten, der FallbackValue wird verwendet, wenn die Bindung keinen Wert zurückgeben kann, und in dem angegebenen Beispiel liefert die Bindung einen gültigen Wert.

Nehmen wir zum Beispiel jedes der folgenden Snippets, die auf dem ursprünglichen Beispiel basieren:

Beispiel 1
Die Hurr- und Durr-Eigenschaften sind korrekt gebunden; null ist ein gültiger Wert und der FallbackValue wird nie gesehen.

%Vor%

Beispiel 2
Die Eigenschaften Hurr und Durr sind nicht korrekt gebunden. der FallbackValue wird gesehen.

%Vor%

Beispiel 3
Wenn ein Bindungspfad ungültig ist, wird der FallbackValue angezeigt.

%Vor%

Beispiel 4
Wie bei den vorherigen Beispielen ist die Bindung korrekt, daher wird der FallbackValue nicht verwendet. Darüber hinaus sollte der FallbackValue für jede der untergeordneten Eigenschaften Binding des übergeordneten Elements MultiBinding auf einen FallbackValue verweisen, der für die Zieleigenschaft von MultiBinding und nicht für die untergeordneten Bindungen verwendet wird.

%Vor%

Beispiel 5
Die Bindung ist weiterhin gültig, obwohl in Binding properties kein Pfad angegeben ist, da die Bindung das Objekt verwendet, an das sie gebunden ist.

%Vor%

Beispiel 6
Wenn schließlich ein Converter zu einer der Bindungseigenschaften hinzugefügt wird, um einen UnsetValue zu erzwingen, wird der MultiBinding FallbackValue angezeigt:

Konverter

%Vor%

XAML

%Vor%     
Metro Smurf 09.01.2013, 20:59
quelle

Tags und Links