2014-12-11 17 views
8

ho DataGrid e una delle colonne DataGrid assomiglia a questoBinding proprietà DataGridCell ToolTip al valore della 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> 

Il problema è che costretto a usare BooleanToYesNoConverter convertitore due volte. Significa che il metodo Convert di BooleanToYesNoConverter verrà invocato due volte. Pertanto, voglio ottimizzare il mio codice. E desidera associare il valore della proprietà ToolTip direttamente al valore della cella.

Ho provato l'approccio con l'utilizzo di ElementName-s. Ma non ho idea di cosa dovrei specificare nella proprietà Path di associazione.

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

ho provato ad usare DataGridTemplateColumn invece di DataGridTextColumn, ma does't lavoro troppo.

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

Come posso risolvere il mio compito. È possibile a tutti?

risposta

17

usare questo stile :

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

Funziona bene. Grazie. – monstr

+0

Btw, 'Content' è il tipo di proprietà di' Object'. 'Object' non ha la proprietà' Text'. Sai che tipo di oggetto ha una proprietà 'Text'? In altre parole, a che tipo appartiene la proprietà 'Text'? È interessante e non ovviamente. – monstr

+0

Sì, stai pensando bene. In ContentPresentor di DataGridCell, ha un TextBlock e questo TextBlock ha la proprietà Text. Hai capito? –

-1

provare solo impostando la descrizione comandi al DataContext del DataGridCell in questo modo:

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

Se non si ottiene il contenuto desiderato è possibile specificare il convertitore così:

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

@ Down-voter: se stai per down-vote allora dovresti almeno dare un motivo o fornire una risposta migliore – Xtr

+0

@ Xtr, non ho fatto il downwote della risposta, ma dovrei farlo. Perché, in primo luogo, Value = "{Binding}" - ovviamente errato. Secondo: la domanda è "come non usare BooleanToYesNoConverter" due volte. Dovresti controllare il tuo consiglio prima di rispondere. – monstr

+0

@monstr Value = "{Binding}" si collegherebbe al DataContext ereditato. Non ho provato la mia risposta prima di postare, mi dispiace per quello. – Xtr

Problemi correlati