2014-12-11 17 views
8

Tôi có DataGrid và một trong những DataGrid cột trông như thế nàyBinding tài sản DataGridCell ToolTip để giá trị của 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> 

Vấn đề là tôi buộc phải sử dụng BooleanToYesNoConverter Chuyển đổi hai lần. Điều này có nghĩa là phương thức Convert của BooleanToYesNoConverter sẽ được gọi hai lần. Do đó, tôi muốn tối ưu hóa mã của mình. Và muốn ràng buộc giá trị của thuộc tính ToolTip trực tiếp vào giá trị của ô.

Tôi đã thử phương pháp tiếp cận bằng cách sử dụng ElementName -s. Nhưng tôi không biết tôi nên chỉ định điều gì trong số Đường dẫn thuộc tính ràng buộc.

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

Tôi cố gắng để sử dụng DataGridTemplateColumn thay vì DataGridTextColumn, nhưng nó does't làm việc quá.

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

Làm cách nào để giải quyết tác vụ của mình. Có thể ở tất cả?

Trả lời

17

Sử dụng phong cách này :

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

Nó hoạt động tốt. Cám ơn. – monstr

+0

Btw, 'Nội dung' là loại thuộc tính của' Đối tượng'. 'Đối tượng' không có thuộc tính' Văn bản'. Bạn có biết loại đối tượng nào có thuộc tính 'Văn bản' không? Nói cách khác, thuộc tính 'Văn bản' thuộc loại nào? Nó là thú vị và không rõ ràng. – monstr

+0

Có bạn đang nghĩ đúng. Trong ContentPresentor của DataGridCell, nó có một TextBlock và TextBlock này có thuộc tính Text. Bạn có hiểu không? –

-1

Cố gắng chỉ thiết lập các ToolTip để DataContext của DataGridCell như vậy:

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

Nếu bạn không nhận được nội dung mong muốn thì bạn có thể chỉ định bộ chuyển đổi cũng như:

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

@ Cử tri bỏ phiếu: Nếu bạn sắp bỏ phiếu thì bạn nên có lý do hoặc cung cấp một câu trả lời tốt hơn. – Xtr

+0

@ Xtr, tôi không làm giảm câu trả lời của bạn, nhưng tôi nên làm điều đó. Bởi vì, đầu tiên, Value = "{Binding}" - rõ ràng là không chính xác. Câu hỏi thứ hai là "làm thế nào không sử dụng BooleanToYesNoConverter" hai lần. Bạn nên kiểm tra lời khuyên của mình trước khi trả lời. – monstr

+0

@monstr Value = "{Binding}" sẽ liên kết với DataContext kế thừa. Tôi đã không kiểm tra câu trả lời của tôi trước khi gửi bài, xin lỗi về điều đó. – Xtr

Các vấn đề liên quan