Как связать RadioButton с DataGridTextColumn?

1

Я использую WPF (С#).

<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>            

Скажите, пожалуйста, как привязать IsChecked (RadioButton) к IsReadOnly (DataGridTextColumn)?

Теги:
wpf
binding
radio-button

1 ответ

3
Лучший ответ

DataGridTextColumns не лежит в том же дереве Visual, что и в DataGrid, поэтому простая привязка к ElementName не будет работать здесь.

Если вы используете WPF 4.0 или более позднюю версию, вы можете использовать x: ссылку для привязки с помощью радиокнопок:

<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>

Установите x:Name на радиокнопках и свяжите его с помощью x:Reference.

  • 0
    При использовании {x: Reference <controlname>} в целевом объекте метки WPF Visual Studio генерирует исключение InvalidOperationException с сообщением «Провайдеру службы не хватает службы INameResolver». Подскажите пожалуйста, как мне это исправить?
  • 1
    Вы должны получать только ошибку дизайнера. Это уже известная ошибка в WPF. Тем не менее, есть обходной путь, если вы хотите, чтобы дизайнер был показан, описанный здесь . Также этот вопрос может представлять интерес для - stackoverflow.com/questions/17392162/… .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню