Erhalte den Source-Wert in der ConvertBack () - Methode für die Implementierung des IValueConverter in der WPF-Bindung

7

Ich binde eine Abhängigkeitseigenschaft an textboxex in WPF. Die Eigenschaft ist eine Zeichenfolge, deren Werte durch "/" getrennt sind (Beispiel: "1/2/3/4"). Ich muss einzelne Werte an separate Textfelder binden, was mit der folgenden Implementierung von Convert() method funktioniert:

%Vor%

Und ich verwende ConverterParameter in xaml , um die Position des gewünschten Wertes anzugeben. Das Problem liegt jedoch in ConvertBack() method. Ich weiß nicht, wie man den Quellwert erhält, so dass ich einfach nur einen Wert in der Zeichenfolge (an der angegebenen Position) hinzufügen oder ändern konnte.

Danke für jede Hilfe.

    
tom 15.08.2011, 11:34
quelle

5 Antworten

5

In den meisten Fällen können Sie sicher machen, dass ConvertBack nur NotImplementedException ausgibt.

Tatsächlich haben Sie einfach nicht genug Informationen, um den Quellwert von seinem Teil wiederherzustellen!

Wenn Sie wirklich die Rückkonvertierung benötigen (z. B. wenn Sie eine Bindung in zwei Richtungen verwenden), würde ich die Eigenschaft im View-Modell (die in DataContext verwendete Klasse) in drei Strings aufteilen und separat an sie binden.

    
Vlad 15.08.2011, 11:39
quelle
13

Aktualisieren

Sie haben Ihr Problem wahrscheinlich bereits mit Hilfe von Vlad gelöst, ich dachte mir nur, ich sollte eine weitere Möglichkeit hinzufügen, den Quellwert im Konverter tatsächlich zu erhalten.

Zuerst können Sie Ihren Konverter von DependencyObject ableiten, so dass Sie ihm eine Abhängigkeitseigenschaft hinzufügen können, an die wir

binden werden %Vor%

Leider hat ein Converter kein DataContext , so dass die Bindung nicht sofort funktioniert, aber Sie können Josh Smiths exzellentes DataContextSpy verwenden: Künstliche Vererbungskontexte in WPF

%Vor%

Ende der Aktualisierung

Dr.WPF hat eine elegante Lösung dafür, siehe folgenden Thread
Die Möglichkeit, in ConvertBack () auf die Bindungsquelle zuzugreifen?

Bearbeiten

Wenn Sie die Lösung von Dr.WPF verwenden, können Sie dem Konverter sowohl den String-Index als auch die Quelle TextBox mit diesem (vielleicht etwas ausführlichen) Beispielcode liefern

%Vor%

Und dann könnten Sie später sowohl auf den Index als auch auf TextBox in der ConvertBack-Methode zugreifen

%Vor%     
Fredrik Hedblad 15.08.2011 12:14
quelle
1

Wäre es besser, wenn Sie einen IMultiValueConverter und eine MultiBinding-Funktion verwenden? ?

%Vor%     
Grokodile 15.08.2011 11:43
quelle
1

Wenn Sie in diesem Fall wirklich in der Lage sein möchten, die Bestandteile zu bearbeiten, Sie könnten Ihre Zahl durch ein komplexeres Objekt darstellen, das Ihnen den Zugriff auf die vier Bestandteile durch einen Indexer ermöglicht. Auf diese Weise ist es nur eine einfache Bindung und das Objekt, das die 4 Teile enthält, wird aufgerufen und kann die ganze Zahl zusammenfügen:

%Vor%     
flq 15.08.2011 11:46
quelle
0

Ich habe gerade eine schnelle Probe aufgebaut. Bitte überprüfen Sie, ob Sie nach dem gleichen suchen. Das funktioniert an meinem Ende.

  • Xaml-Code

    %Vor%
  • Code hinter

    %Vor%

Allerdings konnte ich das genaue Problem mit ConvertBack Methode nicht verstehen. Können Sie das bitte näher ausführen?

    
Ujjwal 16.08.2011 08:38
quelle

Tags und Links