2009-04-11 14 views
7

Ho un DataGrid e un Expander in questo modo:StringFormat Binding non sembra funzionare correttamente

<StackPanel> 
<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}">...</my:DataGrid> 
<Expander Header="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}">...</Expander> 
</StackPanel> 

Il legame va bene, ma per qualche motivo la formattazione stringa non funzionerà. Visualizza sempre solo il valore dataGrid1.SelectedItem.Name Ho anche provato:

StringFormat=Details of \{0\} 

che non funziona.

Ho persino provato a impostare la proprietà HeaderStringFormat dell'Espander su "Dettagli di {0}" ma non è possibile formattarlo.

sono stato in grado di ottenere questa soluzione alternativa al lavoro però:

<Expander> 
<Expander.Header> 
<TextBox Text="{Binding ElementName=dataGrid1, Path=SelectedItem.Name, StringFormat=Details of {0}}"></TextBox> 
</Expander.Header> 
</Expander> 

Qualcuno sa perché StringFormat non funziona per la proprietà Header?

risposta

4

Secondo http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/, sembra che la proprietà HeaderStringFormat non è pensato per essere utilizzato con il legame formato stringa, ma piuttosto per specificare il formato da utilizzare quando si associa a un oggetto che implementa IFormattable.

Dato che, non ho potuto ottenere la formattazione della stringa per lavorare direttamente nell'espressione di associazione, in modo che potesse essere solo un bug. Dovresti provare a notificare Microsoft e forse lo risolveranno.

Con la vostra soluzione, vi suggerirei di usare un TextBlock piuttosto che un TextBox, dal momento che probabilmente non si vuole che l'utente sia in grado di modificare il testo nell'intestazione Expander.

+0

OK, questo è informativo. Grazie. Inoltre, sto usando un TextBlock ... Credo di averlo appena sbagliato quando ho fatto il post. – Adam

0

Potrebbe avere qualcosa a che fare con Header che è una proprietà di tipo Object piuttosto che String. La conversione del valore String in un controllo dell'interfaccia utente potrebbe interferire con la formattazione. Invece di TextBox, anche Label funziona? Questo dovrebbe darti lo stesso effetto di quello che stavi inizialmente cercando di fare.

Aggiornamento: Prova anche a esaminare la proprietà HeaderStringFormat.

+0

Si ha un punto a circa Header essere un oggetto e TextBox.Text essendo una stringa. Ho appena provato con un'etichetta, tuttavia, e ha funzionato quando ho impostato ContentFormatString su ciò che volevo. La proprietà Label Content è anche un oggetto quindi non riesco ancora a capire ... qualcosa di strano con l'intestazione. – Adam

3

Ho anche incontrato lo stesso problema e dopo aver letto alcuni articoli, provando tutti i tipi di ContentStringFormat e HeaderStringFormat Ho appena deciso di fare la prossima cosa:

<Expander Grid.Row="1" Padding="4"> 
       <Expander.Header> 
       <TextBlock Text="{Binding ElementName=cbCategory, Path=SelectedItem.CategoryName, StringFormat='FORMATTED &quot;{0}&quot;'}"/> 
       </Expander.Header>