2009-04-11 22 views
7

Ich habe ein Datagrid und einen Expander wie so:Binding String scheint nicht richtig zu funktionieren

<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> 

Die Bindung in Ordnung ist, aber aus irgendeinem Grunde die Zeichenfolge Formatierung wird nicht funktionieren. Es zeigt immer nur den Wert dataGrid1.SelectedItem.Name ich auch versucht:

StringFormat=Details of \{0\} 

, die nicht funktioniert.

Ich habe sogar versucht, nur die HeaderStringFormat -Eigenschaft des Expander auf "Details von {0}", aber das formatiert es auch nicht.

konnte ich diese Abhilfe obwohl zur Arbeit kommen:

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

Weiß jemand, warum String für die Header-Eigenschaft funktioniert nicht?

Antwort

4

Nach http://codingcontext.wordpress.com/2008/11/17/headerformatstring-and-contentformatstring/, es sieht aus wie die HeaderStringFormat Eigenschaft nicht mit String-Format Bindung verwendet werden sollte, sondern das Format, zu verwenden, wenn auf ein Objekt Bindung, die IFormattable implementiert.

Da konnte ich String-Formatierung nicht direkt im Bindungsausdruck arbeiten, so dass dies möglicherweise nur ein Fehler sein. Sie sollten versuchen, Microsoft zu benachrichtigen und vielleicht werden sie es beheben.

Mit Ihrem Problem zu umgehen, würde ich ein TextBlock eher als ein TextBox mit vorzuschlagen, da Sie wahrscheinlich der Benutzer nicht möchten in der Lage sein, den Text in den Expander Header zu bearbeiten.

+0

Okay, das ist informativ. Vielen Dank. Außerdem benutze ich einen TextBlock ... Ich schätze, ich habe es einfach falsch geschrieben, als ich den Post gemacht habe. – Adam

0

Es kann etwas damit zu tun haben, dass Header eine Objekttyp-Eigenschaft und nicht String ist. Die Konvertierung des Zeichenfolgenwerts in ein UI-Steuerelement kann die Formatierung beeinträchtigen. Anstatt TextBox funktioniert Label auch? Das sollte Ihnen den gleichen Effekt geben wie das, was Sie ursprünglich versuchten.

Aktualisieren: Versuchen Sie auch, in die HeaderStringFormat Eigenschaft zu suchen.

+0

Sie haben noch einen Punkt über Kopf zu sein ein Objekt und TextBox.Text ist eine Zeichenfolge. Ich habe es jedoch nur mit einem Label versucht, und es hat funktioniert, als ich den ContentFormatString auf das eingestellt habe, was ich wollte. Die Label-Content-Eigenschaft ist auch ein Objekt, also verstehe ich immer noch nicht ... etwas Seltsames mit dem Header. – Adam

3

Ich habe auch begegnete das gleiche Problem und nach einigen Artikeln zu lesen und versuchen, alle Arten von ContentStringFormat und HeaderStringFormat Ich habe gerade beschlossen, das nächste, was zu tun ist:

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