9

Voglio concatenare nella mia finestra il titolo una proprietà dal mio viewmodel e un valore che proviene da un file di risorse. Questo è quello che ho a lavorare senza la stringa da risorse:Stringformat concatena il database e il valore della risorsa

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

Ora voglio per rimuovere la stringa "Building" e mettere un valore da una risorsa come io uso su altri luoghi:

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

Come posso definire entrambi? Posso definire come un parametro {1}?

risposta

15

Sì, è possibile. Basta usare uno MultiBinding.

L'articolo MSDN su StringFormat ha un esempio.

Nel tuo caso, il codice sarebbe simile a questa:

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

Multibinding a una risorsa statica? non ne ho mai sentito parlare: S – Louro

+0

Allora potrei aver frainteso, cosa intendi per "risorsa statica"? È una proprietà statica di una classe? Se questo è il caso, credo che il supporto per il binding sia nuovo in .NET 4.5 – madd0

+0

Ho aggiornato la domanda. Voglio usare un valore dalla mia risorsa .resx. Non penso di poterlo fare con una rilegatura ... – Louro

7

Ho visto il MultiBinding risposta in più punti oggi, e non è quasi mai necessario usarlo. Puoi invece definire la tua risorsa come formato di stringa e, fintanto che esiste un solo argomento di formato stringa, non è richiesto il numero MultiBinding. Rende il codice molto più succinta:

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

e la risorsa TitleDesc è ovviamente "Building: {0}".

+0

Voto positivo per questa risposta. Molto più semplice dell'uso di MultiBindings –

+1

Grazie stavo facendo l'errore di prefissare la stringa in risorse con '{}'. Inoltre volevo qualcosa come '\\ Path \ {0}' quindi quello che ho finito per mettere nel file .resx era '\\\\ Path \\ {0}' - necessario per evitare i backslash – stambikk