IValueConverter mit gebundenen Abhängigkeitseigenschaften

8

Ich muss die StringFormat einiger gebundener TextBlocks zur Laufzeit basierend auf dem Einheitensystem ermitteln, das in dem zu bindenden Objekt identifiziert ist.

Ich habe einen Konverter mit einer Dependency-Eigenschaft, an die ich binden möchte. Der gebundene Wert wird beim Festlegen des Konvertierungsprozesses verwendet.

%Vor%

Ich erkläre den Konverter

%Vor%

und binden Sie den TextBlock

%Vor%

Trotzdem erhalte ich den folgenden Fehler:

System.Windows.Data Error: 2: Das FrameworkElement oder FrameworkContentElement für das Zielelement kann nicht gefunden werden. BindingExpression: Pfad = IsMetric; Datenelement = null; Zielelement ist 'UnitConverter' (HashCode = 62641008); Zieleigenschaft ist 'IsMetric' (Typ 'Boolean')

Ich denke, das wird initialisiert, bevor ich den Datenkontext setze und daher gibt es nichts, an das ich die Eigenschaft IsMetric binden könnte. Wie kann ich das gewünschte Ergebnis erzielen?

    
Cadair Idris 02.04.2012, 18:52
quelle

1 Antwort

6

Vorausgesetzt, dass Breadth und IsMetric Eigenschaften desselben Datenobjekts sind, können Sie eine MultiBinding in Verbindung mit einem Multi-Value-Konverter :

%Vor%

mit einem Konverter wie diesem:

%Vor%

Das Problem mit Ihrem Ansatz besteht darin, dass der UnitConverter, wenn er als Ressource deklariert ist, keinen DataContext hat und später auch nie einen bekommt.

Und noch eine wichtige Sache: Der ValueChanged Callback für UnitConverter.IsMetric ist Unsinn. Er setzt dieselbe Eigenschaft erneut, die gerade geändert wurde.

    
Clemens 02.04.2012, 19:09
quelle