Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

WPF - How to bind a DataGridTemplateColumn

Tags:

I am trying to get the name of the property associated with a particular DataGridColumn, so that I can then do some stuff based on that. This function is called when the user clicks context menu item on the column's header...

This is fine for the out-of-the-box ready-rolled column types like DataGridTextColumn, since they are bound, but the problem is that some of my columns are DataGridTemplateColumns, which are not bound.

private void GroupByField_Click (object sender, RoutedEventArgs e){         MenuItem mi = (MenuItem)sender;         ContextMenu cm = (ContextMenu) mi.Parent;         DataGridColumnHeader dgch = (DataGridColumnHeader) cm.PlacementTarget;           DataGridBoundColumn dgbc = (DataGridBoundColumn) dgch.Column;         Binding binding = (Binding) dgbc.Binding;         string BoundPropName = binding.Path.Path;          //Do stuff based on bound property name here...     } 

So, take for example my Name column... it's a DataGridTemplateColumn (since it has an image and some other stuff in there). Therefore, it is not actually bound to the 'Name' property... but I would like to be, so that the above code will work.

My question is two-part, really:

  1. Is it possible to make a DataGridTemplateColumn be BOUND, so that the above code would work? Can I bind it somehow to a property?

  2. Or do I need to something entirely different, and change the code above?

Thanks in advance!

AT

like image 995
Andy T Avatar asked Apr 09 '10 11:04

Andy T


1 Answers

Although you can't bind a template column, you can bind one of the controls held in that column. This is how I solved a similar problem:

<DataGridTemplateColumn Header="ColumnHeader">      <DataGridTemplateColumn.CellTemplate>            <DataTemplate>                  <local:CustomisedUIElement Text="{Binding Path=PropertyToBindTo}"/>            </DataTemplate>      </DataGridTemplateColumn.CellTemplate> </DataGridTemplateColumn> 

If I've understood the initial example properly, this would mean changing the logic of the GroupByField_Click() method to check whether the sending column was a template column and then looking at the elements it contained to obtain the Binding object.

like image 136
rankAmateur Avatar answered Sep 25 '22 14:09

rankAmateur