2014-12-11 21 views
8

mam DataGrid i jeden z DataGrid kolumn wygląda toBinding właściwość DataGridCell ToolTip do wartości 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> 

Problem jest zmuszony do korzystania BooleanToYesNoConverter konwerter dwukrotnie. Oznacza to, że metoda Convert zostanie wywołana dwukrotnie. Dlatego chcę zoptymalizować mój kod. I chcesz związać wartość właściwości ToolTip bezpośrednio z wartością komórki.

Próbowałem podejście przy użyciu ElementName -s. Ale nie mam pojęcia, co należy określić w właściwości wiązania.

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

Próbowałem użyć DataGridTemplateColumn zamiast DataGridTextColumn, ale to nie podlega programowi pracy też.

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

Jak mogę rozwiązać moje zadanie. Czy to w ogóle możliwe?

Odpowiedz

17

użyć tego stylu :

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

Działa dobrze. Dzięki. – monstr

+0

Btw, "Treść" jest typem właściwości obiektu. 'Obiekt' nie ma właściwości' Tekst'. Czy wiesz, jaki typ obiektu ma własność 'Text'? Innymi słowy, do jakiego typu należy własność 'Text'? Jest to interesujące i nie oczywiste. – monstr

+0

Tak, masz rację. W ContentPresentor DataGridCell ma TextBlock i ta TextBlock ma właściwość Text. Zrozumiałeś? –

-1

Spróbuj tylko ustawienie ToolTip do tego DataGridCell za DataContext tak:

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

Jeśli nie uzyskać pożądaną zawartość można następnie określić konwerter, a także:

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

@ Down-voter: Jeśli zamierzasz głosować na niższy poziom, powinieneś co najmniej podać powód lub podać lepsza odpowiedź. – Xtr

+0

@ Xtr, nie przesłałem ci odpowiedzi, ale powinienem to zrobić. Ponieważ, po pierwsze, Value = "{Binding}" - oczywiście niepoprawne. Po drugie - pytanie brzmi "jak nie używać BooleanToYesNoConverter" dwa razy. Przed udzieleniem odpowiedzi powinieneś sprawdzić swoją opinię. – monstr

+0

@monstr Wartość = "{Binding}" spowoduje powiązanie z odziedziczonym DataContext. Nie testowałem odpowiedzi przed wysłaniem, przepraszam za to. – Xtr