1

I use WPF (C #).

<DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Header="Col1" IsReadOnly="{Binding}" >
    </DataGridTextColumn>

    <DataGridTextColumn Header="Col2" IsReadOnly="{Binding}" >
    </DataGridTextColumn>
  </DataGrid.Columns>
</DataGrid>               

<GroupBox>
  <StackPanel>
      <RadioButton IsChecked="{Binding}" Content="Col1 IsReadOnlyFalse, Col2 IsReadOnlyTrue"/>
      <RadioButton IsChecked="{Binding}" Content="Col1 IsReadOnlyTrue, Col2 IsReadOnlyFalse"/>
  </StackPanel>                                               
</GroupBox>            

Please tell me, how to binding IsChecked(RadioButton) with IsReadOnly(DataGridTextColumn)?

Olga
  • 1,395
  • 2
  • 25
  • 34

1 Answers1

3

DataGridTextColumns doesn't lie in same Visual tree as that of DataGrid so simple binding with ElementName won't work here.

In case you are using WPF 4.0 or higher you can use x:Reference to bind with radio buttons like this:

<DataGrid ItemsSource="{Binding GroupsCollection}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Col1"
                            IsReadOnly="{Binding IsChecked,
                                         Source={x:Reference DisableColumn1}}" >
        </DataGridTextColumn>

        <DataGridTextColumn Header="Col2"
                            IsReadOnly="{Binding IsChecked,
                                         Source={x:Reference DisableColumn2}}" >
        </DataGridTextColumn>
    </DataGrid.Columns>
</DataGrid>

<GroupBox>
    <StackPanel>
        <RadioButton x:Name="DisableColumn2"
                     Content="Col1 IsReadOnlyFalse, Col2 IsReadOnlyTrue"/>
        <RadioButton x:Name="DisableColumn1"
                     Content="Col1 IsReadOnlyTrue, Col2 IsReadOnlyFalse"/>
    </StackPanel>
</GroupBox>

Set x:Name on radio buttons and bind with it using x:Reference.

Rohit Vats
  • 79,502
  • 12
  • 161
  • 185
  • When using {x:Reference } in the Target of a WPF Label, Visual Studio throws an InvalidOperationException exception with message "Service provider is missing the INameResolver service." Please tell me how can I fix it? – Olga Jul 23 '14 at 05:58
  • 1
    You must be getting the designer error only. This is already known bug in WPF. However, there is a workaround in case you want designer to be shown described [here](http://social.msdn.microsoft.com/Forums/vstudio/en-US/159cd39a-0397-48bd-a5d7-cf3cef1a90e8/service-provider-is-missing-the-inameresolver-service?forum=wpf). Also this question might be of your interest to - http://stackoverflow.com/questions/17392162/bind-visibility-to-checkable-menu-item-shows-error-service-provider-is-missing. – Rohit Vats Jul 23 '14 at 06:39