2012-08-16 2 views
6

Ho un WPF TextBox associato a un numero di vista modello struttura Distance attraverso Caliburn.Micro convenzione. Voglio essere in grado di personalizzare il formato di stringa preservando il binding della convenzione che è stato impostato Caliburn.Micro. Come dovrei farlo?Personalizzazione formato stringa in un Caliburn.Micro convenzione TextBox vincolato

Dal mio Vista Modello:

public double Distance 
{ 
    get { return _distance; } 
    set 
    { 
     _distance = value; 
     NotifyOfPropertyChange(() => Distance); 
    } 
} 

Dal mio Vista:

<TextBox x:Name="Distance"/> 

Quando il Distance è diverso da zero, voglio visualizzare il numero con un gruppo fisso di decimali e quando lo Distance è zero, voglio che la casella di testo sia vuota.

Utilizzando esplicito legame posso associare la proprietà TextBox.Text a Distance, e poi posso impostare la StringFormat simultaneamente:

<TextBox x:Name="Distance" Text="{Binding Distance, StringFormat=0.000;;#}"/> 

Tuttavia, l'esplicito Text vincolante sarebbe poi cortocircuitare la Caliburn.Micro di denominazione convenzione vincolante. È possibile personalizzare il formato della stringa senza dover impostare contemporaneamente il percorso di binding della proprietà , in modo da poter contare unicamente su Caliburn.Micro per gestire il binding Distance -to- TextBox?

+2

Le risposte brevi sono no. O si utilizza il binding generato da Caliburn o si deve scrivere l'intera espressione di binding come nel proprio esempio. – nemesv

+2

La distanza non deve essere un numero, è un modello di ciò che si desidera essere nella vista. Quindi non rendere la proprietà un doppio, fai in modo che sia la stringa che desideri nella vista. –

+0

Se non si riesce a collegare tutto manualmente, l'unica cosa vincolata dalla convenzione dei nomi è il puntello o l'azione vincolanti predefinita. Un legame non è troppo orribile da guardare è? – Charleh

risposta

2

Non c'è alcun modo possibile di ciò che si vuole fare. Il modo più semplice è quello di fornirti. Il secondo modo è di esporre la proprietà string nel ViewModel e preformarlo nel getter.