Die OneWay-Bindung funktioniert nicht mehr, nachdem das Ziel manuell aktualisiert wurde

8

Ich habe einen solchen WPF-Bindungscode:

%Vor%

Die zweite Behauptung schlägt fehl! Das erscheint mir seltsam.

Außerdem habe ich 'OneWayToSource' anstelle von 'OneWay' versucht und alles funktioniert wie erwartet.

%Vor%

Weitere Details:

%Vor%

Was ist falsch an meinem Code?

    
alex2k8 28.02.2009, 15:15
quelle

4 Antworten

13

Einstellung target.Attribute="foo"; hat die Bindung gelöscht.

MSDN:

  

Nicht nur dynamische Ressourcen und   Bindungen arbeiten gleichzeitig   Vorrang als lokaler Wert, sie   sind wirklich ein lokaler Wert, aber mit einem   Wert, der zurückgestellt wird. Ein   Folge davon ist, dass wenn Sie   eine dynamische Ressource oder Bindung haben   Platz für einen Eigenschaftswert, irgendeinen lokalen   Wert, den Sie anschließend festlegen   ersetzt die dynamische Bindung oder   verbindlich vollständig. Selbst wenn du anrufst   ClearValue zum Löschen der lokal gesetzten   Wert, die dynamische Ressource oder Bindung   wird nicht wiederhergestellt. In der Tat, wenn Sie   Rufen Sie ClearValue für eine Eigenschaft auf, die   eine dynamische Ressource oder Bindung an Ort und Stelle   (ohne "wörtlichen" lokalen Wert), sie   werden durch den ClearValue-Aufruf gelöscht   auch.

    
alex2k8 01.03.2009, 13:16
quelle
1

Ich bin kein bindender Experte, aber ich glaube, dass Sie in eine WPF-Abhängigkeitsproperty-Abhängigkeit geraten. Es ist wahrscheinlich, dass das Festlegen des Werts direkt Vorrang vor dem Bindungswert hat. Deshalb überschreibt es die Bindung.

Hier finden Sie eine vollständige Auflistung der Abhängigkeitseigenschaften: Ссылка

    
JaredPar 28.02.2009 15:51
quelle
0
  

Beispiel: TextProperty ist "Text"   Abhängigkeitseigenschaft von TextBox.   Rufen Sie diese in Code auf:

     

TextBox1.TextProperty="Wert";

WPF-Eigenschaften können auf zwei Arten festgelegt werden: durch Aufrufen der DependencyObject.SetValue-Methode (zB instance.SetValue (TextProperty, "Irgendein Text")) oder mit CLR Wrapper (zB. instance.Text="ein bisschen Text").

TextBox.TextProperty ist ein statisches DependencyProperty-Objekt, sodass Sie einem Referenztyp keinen String-Wert zuweisen können.

    
Vlad 03.08.2009 07:06
quelle
-1

Wenn Sie Binding Mode auf OneWay setzen, bedeutet dies, dass die Bindung nur auf eine Weise funktioniert: Das Ziel wird aktualisiert, wenn sich die Quelle ändert.

Aber das Ziel muss eine Abhängigkeitseigenschaft sein, und der Code, den Sie haben, ist eine CLR .NET-Eigenschaft. Sie sollten den Wert für das Ziel mithilfe des registrierten Abhängigkeitseigenschaftsnamens und nicht nur eines normalen .NET-Eigenschaftsnamens festlegen. Die Antwort von Jared ist völlig richtig. Dies könnte Verwirrung bei der Konfliktlösung zwischen der WPF-Abhängigkeitseigenschaft und der normalen .NET CLR-Eigenschaft verursachen.

Wenn Sie der Konvention folgen, sollte die Abhängigkeitseigenschaft die Form "propertyname" + property haben.

Beispiel: TextProperty ist die "Text" -Abhängigkeitseigenschaft von TextBox. Rufen Sie diese in Code auf:

%Vor%

Weitere Informationen zum Festlegen der Bindungsquelle finden Sie unter

Ссылка

    
Eriawan Kusumawardhono 28.02.2009 17:11
quelle

Tags und Links