2016-11-03 2 views
1

ich verwenden, um diese zu haben:String in XAML mit Bindung/Funktion/Format

xmlns:wpf="clr-namespace:Pol.Wpf;assembly=Pol.Wpf" 
Heading="{wpf:Translation Id=5589, Default=Evaluation on, IsUpper=True}" 

Das funktionierte gut und gab mir einen die Ausgabe: „Evaluation auf“

Dann brauchte ich ein einfügen Datum in der Überschrift, formatiert:

Heading="{Binding EvaluationDateTime, StringFormat='{} Evaluation on {0:dd-MM-yyyy HH:mm}'}" 

das gab mir die Ausgabe: Auswertung auf 12-04-2016 10:12

Perfect, aber ich brauche meine „Evaluation auf“ Änderungen verwenden

"{wpf:Translation Id=5589, Default=Evaluation on, IsUpper=True}" 

ich zahlreiche Dinge ausprobiert haben und kann einfach nicht meine Zeichenfolge in Kombination mit einer Bindung, String zu arbeiten und Funktion übersetzen . Ich brauche es mit so etwas wie dies funktioniert:

Heading="{Binding EvaluationDateTime, StringFormat='{} {wpf:Translation Id=5589, DefaultTranslation=Evaluation on, IsUpper=True} {0:dd-MM-yyyy HH:mm}'}" 
+2

Sollte dies nicht im View-Modell sein? Wenn es in der XAML sein soll, würde ich vorschlagen, dass Sie die Überschrift auf einen 'TextBlock' setzen, der zwei getrennte Läufe hat - der erste Text 'Bewertung' und der nächste an das Datum gebundene 'StringFormat'. –

+0

Wenn ich es im Viewmodel machen muss, muss ich eine Auflistung durchlaufen, um eine Eigenschaft hinzuzufügen, da ich das Modell, aus dem die Kollektion stammt, nicht ändern darf. Und auch die "Überschrift" ist eine Abhängigkeitseigenschaft für ein benutzerdefiniertes Benutzersteuerelement vom Typ string. Ich habe versucht und drinnen habe ich versucht , aber es beklagt, dass nicht als Zeichenfolge erkannt wird. – user1702369

+0

Was ist 'Übersetzung'? Ist das eine XAML-Markup-Erweiterung? – dymanoid

Antwort

0

Da ich nicht sicher sein kann, was die Pol.Wpf.TranslationExtension Klasse sieht aus wie genau und ob Sie die Möglichkeit haben, es zu ändern, ich werde eine vielseitigere Lösung vorschlagen.

Die Idee ist die Unterklasse TranslationExtension und bieten die Möglichkeit, den Wert von der ursprünglichen Erweiterung zu formatieren. Der Code ist kurz und einfach:

public class FormattedTranslationExtension : TranslationExtension 
{ 
    public string Format { get; set; } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     var baseValue = base.ProvideValue(serviceProvider)?.ToString(); 
     if (baseValue != null && Format != null) 
      return string.Format(Format, baseValue); 
     else 
      return baseValue; 
    } 
} 

Ihr dann verbindlich würde wie folgt aussehen:

Heading="{Binding EvaluationDateTime, 
    StringFormat='{local:FormattedTranslation 
     Id=5589, 
     DefaultTranslation=Evaluation on, 
     IsUpper=True, 
     Format='{}{0} {{0:dd-MM-yyyy HH:mm}}'}" 

Die Prämisse dabei ist, dass unsere Erweiterung eine Zeichenfolge produzieren "Evaluation on {0:dd-MM-yyyy HH:mm}" (oder ein übersetztes Äquivalent), so dass Es kann verwendet werden, um das Datum zu formatieren. Da wir die string.Format Methode selbst verwenden, müssen wir dem Ausdruck {0:dd-MM-yyyy HH:mm} entkommen, indem wir ihn in ein zusätzliches Paar geschweifter Klammern setzen, daher haben wir {{0:dd-MM-yyyy HH:mm}}.

Wenn Sie Zugriff auf die TranslationExtension Klasse haben, können Sie diese Logik einfach direkt einfügen.