2014-12-11 10 views
8

I DataGrid und einer der DataGrid Spalten wie folgt aussiehtBinding Datagridcell ToolTip-Eigenschaft auf den Wert der Datagridcell

<DataGridTextColumn Header="Value" 
     Binding="{Binding Value, Converter={StaticResource BooleanToYesNoConverter}}" 
     x:Name="_col2" 
     IsReadOnly="True" 
     CanUserSort="False" 
     Width="*"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding Value, Converter={StaticResource BooleanToYesNoConverter}}" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

Das Problem ist, ich BooleanToYesNoConverter Konverter zweimal verwenden gezwungen. Dies bedeutet, dass Convert Methode von BooleanToYesNoConverter zweimal aufgerufen wird. Daher möchte ich meinen Code optimieren. Und möchten den Wert der ToolTip Eigenschaft direkt an den Wert der Zelle binden.

Ich versuchte Ansatz mit ElementName -s. Aber ich habe keine Ahnung, was ich in Pfad Eigenschaft der Bindung angeben sollte.

<DataGridTextColumn Header="Value" 
     Binding="{Binding Value, Converter={StaticResource BooleanToYesNoConverter}}" 
     x:Name="_col2" 
     IsReadOnly="True" 
     CanUserSort="False" 
     Width="*"> 
    <DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding ElementName=_col2, Path=???}" /> 
     </Style> 
    </DataGridTextColumn.CellStyle> 
</DataGridTextColumn> 

Ich versuchte DataGridTemplateColumn statt DataGridTextColumn zu verwenden, aber es does 't zu arbeiten.

<DataGridTemplateColumn CanUserSort="False" 
         Header="Значение" 
         Width="*"> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Value, Converter={StaticResource BooleanToYesNoConverter}}" 
         Name="_textBlock"/>  
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
    <DataGridTemplateColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding RelativeSource ElementName=_textBlock, Path=Text}" /> 
     </Style> 
    </DataGridTemplateColumn.CellStyle> 
</DataGridTemplateColumn> 

Wie kann ich meine Aufgabe lösen. Ist es überhaupt möglich?

Antwort

17

Mit dieser Art:

<DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding}" /> 
     </Style> 
</DataGridTextColumn.CellStyle> 

Wenn Sie Sie dann den Konverter auch angeben können, nicht den gewünschten Inhalt bekommen :

<Style TargetType="DataGridCell"> 
    <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self},Path=Content.Text}"/> 
</Style> 
+0

Es funktioniert gut. Danke. – monstr

+0

Btw, 'Content' ist der Eigenschaftstyp von' Object'. 'Objekt' hat keine 'Text'-Eigenschaft. Weißt du, welcher Objekttyp eine 'Text'-Eigenschaft hat? Mit anderen Worten, zu welcher Art gehört die Eigenschaft 'Text'? Es ist interessant und nicht offensichtlich. – monstr

+0

Ja, Sie denken richtig. In ContentPresentor von DataGridCell hat es einen TextBlock und dieser TextBlock hat die Eigenschaft Text. Verstehst du? –

-1

Versuchen Sie, nur die Quick-Info auf die Datacontext des Datagridcell etwa so:

<DataGridTextColumn.CellStyle> 
     <Style TargetType="DataGridCell"> 
      <Setter Property="ToolTip" Value="{Binding Converter={StaticResource BooleanToYesNoConverter}}" /> 
     </Style> 
</DataGridTextColumn.CellStyle> 
+0

@ Down-Wähler: Wenn Sie down-abstimmen dann sollten Sie zumindest geben einen Grund oder bieten eine bessere Antwort. – Xtr

+0

@ Xtr, ich habe deine Antwort nicht heruntergeladen, aber ich sollte es tun. Weil, zuerst, Wert = "{Binding}" - offensichtlich falsch. Zweite Frage ist zweimal "wie verwende ich BooleanToYesNoConverter nicht". Sie sollten Ihren Rat vor der Beantwortung überprüfen. – monstr

+0

@monstr Value = "{Binding}" würde an den geerbten DataContext binden. Ich habe meine Antwort vor dem Posten nicht getestet, tut mir leid. – Xtr