【问题标题】:Synchronise Radiobutton Selection with Row selection in a datagrid将单选按钮选择与数据网格中的行选择同步
【发布时间】:2020-02-07 03:54:25
【问题描述】:

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

下面是我写的代码:

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

【问题讨论】:

    标签: c# wpf datagrid radio-button datagridtemplatecolumn


    【解决方案1】:

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

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

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

    本质上,我告诉绑定在可视化树中相对于DataGridRow 查找IsSelected

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

    我希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 2017-07-24
      相关资源
      最近更新 更多