C# 从代码中控制RadioButton DataGridTemplateColumn

C# 从代码中控制RadioButton DataGridTemplateColumn,c#,wpf,wpfdatagrid,C#,Wpf,Wpfdatagrid,我有一个datagrid,它包含3个DataGridTemplateColumns,其中包含单选按钮。 现在,我想通过我的代码隐藏中按钮的单击事件来控制radioButtons的“isEnabled”属性: <DataGrid AutoGenerateColumns="False" Height="300" x:Name="dgEmps" RowEditEnding="gridEmps_RowEditEnding" CellEditEnding="grid

我有一个datagrid,它包含3个DataGridTemplateColumns,其中包含单选按钮。 现在,我想通过我的代码隐藏中按钮的单击事件来控制radioButtons的“isEnabled”属性:

 <DataGrid AutoGenerateColumns="False" Height="300" x:Name="dgEmps"
                RowEditEnding="gridEmps_RowEditEnding" CellEditEnding="gridEmps_CellEditEnding"
              FlowDirection="RightToLeft"  
              SelectionChanged="gridEmps_SelectionChanged">
        <DataGrid.Columns>

            <DataGridTemplateColumn Header="Shift Manager">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="{Binding EmployeeId}"
                                     IsChecked="{Binding IsManager, Mode=TwoWay}" x:Name="dgrIsManager"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Waiter" IsReadOnly="True">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="{Binding EmployeeId}" 
                                     IsChecked="{Binding IsWaiter, Mode=TwoWay}" x:Name="dgrIsWaiter"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Cook" IsReadOnly="True" x:Name="aaa">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <RadioButton GroupName="{Binding EmployeeId}" 
                                     IsChecked="{Binding IsCook, Mode=TwoWay}"  x:Name="dgrIsCook"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

问题是“IsReadOnly”属性不起作用,我似乎无法从代码中访问radioButton属性(甚至不能通过我在xaml中声明的x:name)。 我试过这个: 和许多其他教程/博客文章,但无法使其工作。
有什么想法吗?

要确保readiobutton是只读的,请设置IsitTestVisible

<DataGridTemplateColumn ...>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton ....IsHitTestVisible="False"/>             
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

要确保readiobutton是只读的,请设置IshitteVisible

<DataGridTemplateColumn ...>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <RadioButton ....IsHitTestVisible="False"/>             
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

无法通过x:Name访问RadioButton,因为它是在DataTemplate中定义的,而不是在主内容树中定义的

而是像这样定义DataTemplateColumns(基于上一列):


然后从代码隐藏将aaa.IsReadOnly设置为true或false。此更改应传播到属于此DataGridColumn的每个DataGridCell,然后该DataGridCell将由于绑定而更改RadioButton.IsEnabled


XAML代码段使用BooleanAntiviteConverter,它只是一个反转布尔值的转换器。

您不能通过x:Name访问RadioButton,因为它是在DataTemplate中定义的,而不是在主内容树中定义的

而是像这样定义DataTemplateColumns(基于上一列):


然后从代码隐藏将aaa.IsReadOnly设置为true或false。此更改应传播到属于此DataGridColumn的每个DataGridCell,然后该DataGridCell将由于绑定而更改RadioButton.IsEnabled

XAML代码段使用BooleanAntiviteConverter,它只是一个反转布尔值的转换器