2012-06-13 11 views
14

Come sapete, StringFormat è di grande importanza per la rappresentazione dei dati in WPF. Il mio problema è come usare StringFormat quando multibinding in WPF?Come utilizzare stringformat in multibinding in WPF XAML

Se io do un esempio molto semplice:

Abbiamo variabili, che sono A e B e i cui valori sono 10,255,555 mila e 25,6999999

E vogliamo mostrare loro 10.2,25.6?

Come posso farlo con il multibinding? Normalmente è pezzo di torta con ValueConverter

Qualsiasi aiuto e idee su questo argomento saranno apprezzati greately

risposta

48

Basta impostare la proprietà StringFormat sulla MultiBinding; utilizzare segnaposto ({0}, {1} ...) per ciascun vincolante nel MultiBinding, e comprendono identificatori di formato, se necessario (ad esempio F1 per un numero decimale con cifre decimali 1)

<TextBlock> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0:F1}{1:F1}"> 
      <Binding Path="A" /> 
      <Binding Path="B" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

La {} parte a l'inizio è la stringa di formato è una sequenza di escape (altrimenti il ​​parser XAML considererebbe { l'inizio di un'estensione di markup)

+0

Bene, grazie per la tua rapida risposta, ma puoi spiegarlo brevemente se è possibile nella tua risposta? – ibrahimyilmaz

+0

@ibrahimyilmaz, scusa, ho pensato che il codice fosse auto esplicativo ... Ho aggiunto una breve spiegazione. –

6

Per semplificare è possibile utilizzare due TextBlock/etichette per visualizzare i valori.

Se si utilizza .Net4, è possibile associare a un elemento Run in linea di un TextBlock

<TextBlock> 
    <Run Text="{Binding A, StringFormat={}{0:F1}}"/> 
    <Run Text="{Binding B, StringFormat={}{0:F1}}"/> 
</TextBlock> 
+0

Tra i 2 'Run's sarà uno spazio. Non è come 'StringFormat =" {} {0: F1} {1: F1} "' menzionato sopra. Anche scrivere '' avrà successo solo fino a quando non sarà possibile formattare XAML (come ReSharper fa) e finiscono in ' [CRLF] [CRLF] ' – Marcel

4

Se qualcuno è alla ricerca di "Time formati" Questo è per 24 Clock che è come sono arrivato a questo alberino:

<TextBlock TextAlignment="Center"> 
    <TextBlock.Text> 
     <MultiBinding StringFormat="{}{0:HH:mm} - {1:HH:mm}"> 
      <Binding Path="StartTime" /> 
      <Binding Path="EndTime" /> 
     </MultiBinding> 
    </TextBlock.Text> 
</TextBlock> 

lo 0: e 1: sono il riferimento alla Binding

[0: hh: mm tt] per visualizzare AM/PM