由于我们软件的性质,我们必须在代码后面动态创建我们的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>
答案 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
属性的值。