9

Ich möchte in meinem Fenstertitel eine Eigenschaft aus meinem Viewmodel und einen Wert verketten, der aus einer Ressourcendatei stammt. Das ist, was ich ohne die Zeichenfolge von Ressourcen arbeiten:Stringformat verkettet die Datenbindung und den Wert der Ressource

Title="Binding Path=Description, StringFormat=Building: {0}}" 

Jetzt mag ich das „Building“ string entfernen und einen Wert aus einer Ressource setzen, wie ich an anderen Stellen verwenden:

xmlns:res="clr-namespace:Project.View.Resources" 
{res:Strings.TitleDescription} 

Wie kann ich beides definieren? Kann ich einen Parameter wie {1} definieren?

Antwort

15

Ja, Sie können. Verwenden Sie einfach eine MultiBinding.

Der MSDN-Artikel auf StringFormat hat ein Beispiel.

In Ihrem Fall würde der Code wie folgt aussehen:

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0} {1}"> 
     <Binding Source="{x:Static res:Strings.TitleDescription}"/> 
     <Binding Path="Description"/> 
     </MultiBinding> 
    </TextBlock.Text> 
    </TextBlock> 
+0

Multibinding zu einer statischen Ressource? nie davon gehört: S – Louro

+0

Ich habe vielleicht dann missverstanden, was meinst du mit "statische Ressource"? Ist es eine statische Eigenschaft einer Klasse? Wenn das der Fall ist, glaube ich, Unterstützung für das Binden dieser ist neu in .NET 4.5 – madd0

+0

Ich habe die Frage aktualisiert. Ich möchte einen Wert aus meiner RESX-Ressource verwenden. Ich glaube nicht, dass ich das mit einer Bindung machen kann ... – Louro

7

ich die MultiBinding Antwort an mehreren Stellen jetzt gesehen haben, und es ist, es zu benutzen fast nie nötig. Sie können stattdessen Ihre Ressource als Zeichenfolgenformat definieren, und solange nur ein Zeichenfolgenformatargument vorhanden ist, ist MultiBinding nicht erforderlich. Macht den Code viel prägnanter:

<TextBlock Text="{Binding Description, StringFormat={x:Static res:Strings.TitleDesc}}" /> 

Und die TitleDesc Ressource ist offensichtlich "Building: {0}".

+0

Upvote für diese Antwort. Viel einfacher als die Verwendung von MultiBindings –

+1

Danke Ich habe den Fehler gemacht, die Zeichenfolge in Ressourcen mit dem '{}' voranzutreiben. Auch wollte ich etwas wie '\\ Pfad \ {0}' also was ich in .resx Datei landete '\\\\ Pfad \\ {0}' - benötigt um die Backslashes zu umgehen – stambikk

Verwandte Themen