如何将Tooltip的内容绑定到代码中的MVVM属性?

时间:2011-11-09 17:01:12

标签: c# .net wpf silverlight

由于我们软件的性质,我们必须在代码后面动态创建我们的datagrid列,然后将其添加到datagrid,如下所示:

DataGridBoundColumn dataGridBoundColumn = new DataGridTextColumn
                                                          {
                                                              CellStyle = ...,                                                                            
                                                              Header = header,
                                                              Binding = binding
                                                          };
reportDataGrid.Columns.Add(dataGridBoundColumn);

现在我们需要在columnheader上提供工具提示:

ToolTipService.SetToolTip(dataGridBoundColumn, "ENTER VALUE");

那也很好。但是,我需要将工具提示的值绑定到ViewModel上的属性。我知道如何在xaml中执行此操作,但不知道如何在代码中执行此操作。

任何帮助将不胜感激,

更新

感谢史蒂夫的回答,我能够稍微改变一下:

Binding bindingBoundToTooltipProperty = new Binding()
                                   {
                                       Source = reportDataGrid.DataContext, 
                                       Path = new PropertyPath("ToolTipSorting")
                                   };


BindingOperations.SetBinding(dataGridBoundColumn, ToolTipService.ToolTipProperty, bindingBoundToTooltipProperty);

如果DataGridColumnHeaderStyle是自定义的,请确保将这些行添加到模板中:

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="ToolTip" Value="{Binding Column.(ToolTipService.ToolTip), RelativeSource={RelativeSource Self}}"/>
</Trigger>

1 个答案:

答案 0 :(得分:3)

您应该能够设置如下的绑定:

BindingOperations.SetBinding(dataGridBoundColumn,
    ToolTipService.ToolTipProperty,
    new Binding("Path.To.My.Property"));

注意:DataContext这将是列上Header属性的值

您想要绑定到视图模型上的属性;假设您的视图模型是DataContext的{​​{1}},您可能希望将绑定更改为:

DataGrid

这会尝试找到类型为new Binding("DataContext.ToolTipSorting") { RelativeSource = new RelativeSource(RelativeSourceMode.FindAncestor) { AncestorType = typeof(DataGrid) } } 的第一个父对象,并获取其DataGrid属性的值。