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:
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.
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.
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
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
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
Und dann könnten Sie später sowohl auf den Index als auch auf TextBox
in der ConvertBack-Methode zugreifen
Wäre es besser, wenn Sie einen IMultiValueConverter und eine MultiBinding-Funktion verwenden? ?
%Vor%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%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?
Tags und Links wpf c# binding ivalueconverter