将单选按钮选择与数据网格中的行选择同步

Synchronise Radiobutton Selection with Row selection in a datagrid

我的数据网格中有一个 RadioButtonTemplateColumn。单击单选按钮时,相应的行被选中,但是当单击该行时,相应的单选按钮未被选中。这使系统处于 'confused' 状态,因为单选按钮和行选择不同步。请问我如何同步它们?我查看了类似的回复,但它并没有解决我的问题。

下面是我写的代码:

            <DataGrid.Columns>
                <DataGridTemplateColumn>
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <RadioButton GroupName="Select" IsChecked="{Binding IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>
                <DataGridTextColumn Width="Auto" Header="First Name" Binding="{Binding FirstName}"/>
                <DataGridTextColumn Width="Auto" Header="Last Name" Binding="{Binding LastName}"/>
            </DataGrid.Columns>
        </DataGrid>

问题是您的绑定无效。如果您使用 Snoop Wpf 之类的工具或 Visual Studio 中的实时可视化树,您会发现您的绑定不起作用。

原因是您的 RadioButton 位于模板内,该模板具有网格绑定到的数据的数据上下文 - 而不是 DataGridRow。如果您像这样更新您的绑定,它将起作用:

IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" 

本质上,我告诉绑定查找 IsSelected 相对于 DataGridRow 在视觉树中更高的位置。

另一个问题是,因为您使用的是 RadioButton,所以在单击它时无法取消选择。如果你想让它像一个切换一样,你应该使用 CheckBox 来代替。

希望对您有所帮助。