将单选按钮选择与数据网格中的行选择同步
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
来代替。
希望对您有所帮助。
我的数据网格中有一个 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
来代替。
希望对您有所帮助。