7

Following my earlier post I am now trying now to bind the visibility of DataGridColumns to a VM notification property. MSDN suggests I should be able to do this with ease.

I already have a value convertor and VM notification property that I know works (I have tested these on another element on my page:

<CheckBox x:Name="chkAllTeams" Visibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=AllTeams}"/>

This checkbox control visibility reacts as I would expect. When I set the same binding on the DataTextColumn I get an AG_E_BAD_PARSER error on the Visibility= line of XAML:

<data:DataGridTextColumn 
Visibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=AllTeams}"
/>

Any ideas anyone? Thanks, Mark

Community
  • 1
  • 1
Mark Cooper
  • 6,738
  • 5
  • 54
  • 92

3 Answers3

9

Visibility on the DataGridTextColumn is a different beast on the checkbox. Basically, it isn't a dependency property and can't be data-bound. If you need this functionality, you can subclass DataGridTextColumn and add your own dependency property to get the behavior.

  • Rectangle gets its Visibility property from UIElement and is a dependency property
  • DataGridTextColumn gets its Visibility from DataGridColumn and isn't a dependency property.
Erik Mork
  • 1,443
  • 9
  • 10
  • Ah this is what I expected :-( Is that an easy task to subclass the DataGridTextColumn? Do you know of any online example for that? Mark – Mark Cooper Jun 12 '09 at 07:16
  • 1
    I don't know of any particular examples for DataGridTextColumn. The general approach would be to subclass, add a new dependency property for visibility and then use the new subclass in the Datagrid.Columns . Jesse has a good explanation of dependency properties: http://silverlight.net/blogs/jesseliberty/archive/2008/09/30/dependency-property-system-deeper-dive-part-1.aspx – Erik Mork Jun 12 '09 at 15:49
  • That link is dead now, this is the new one: http://jesseliberty.com/2008/09/30/dependency-property-system-%E2%80%93-deeper-dive-part-1/ – Oskar May 24 '11 at 08:24
  • 1
    how about using an attached property instead? – George Birbilis Aug 02 '14 at 15:40
-1

Did you set BoolToVisibilityConverter as a resource?

vidalsasoon
  • 4,365
  • 1
  • 32
  • 40
-2

You'll need to use a datatemplate:

<DataTemplate x:Key="cBDT">
<(UIELEMENT HERE) x:Name="chkAllTeams" Visibility="{Binding Converter={StaticResource BoolToVisibilityConverter}, Path=AllTeams}"/> </DataTemplate>

As was mentioned before, only UIElement has the "Visibility" dependency property.

To see an example of this in context:

http://blogs.msdn.com/scmorris/archive/2008/04/14/defining-silverlight-datagrid-columns-at-runtime.aspx

Jason Watts
  • 1,086
  • 5
  • 13