如何获取复选框列发件人的datagrid父级

时间:2018-04-13 16:31:55

标签: wpf datagrid sender

您好我有一个datagrid(下面是xaml代码):

<DataGrid.Columns>
                        <DataGridTextColumn Header="FLEET" IsReadOnly="True" Width="1*" Binding="{Binding FLEET, UpdateSourceTrigger=PropertyChanged}" /> 

                        <DataGridTemplateColumn Header="SELECTED?" Width="1*">
                            <DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Viewbox Margin="-0.2" Height="18.5">
                                        <CheckBox IsThreeState="True" IsChecked="{Binding Path=isSelected, UpdateSourceTrigger=PropertyChanged}" Click="FSC_CheckBox_Click"/>

                                    </Viewbox>
                                </DataTemplate>
                            </DataGridTemplateColumn.CellTemplate>
                        </DataGridTemplateColumn>
                    </DataGrid.Columns>

点击事件:

 private void FSC_CheckBox_Click(object sender, RoutedEventArgs e)
    {
     ......
    }

有没有办法从点击发件人那里获取父数据网格对象?我试过这个链接 Get containing row from a CheckBox inside of a DataGrid,但由于viewbox和datatemplate(我猜)它无效。 任何建议表示赞赏。谢谢。

1 个答案:

答案 0 :(得分:2)

点击事件处理程序将获取发件人,您可以将其转换为复选框 我认为最简单的方法是滥用复选框上的Tag属性 这可能是你喜欢的任何旧物件 你可以使用relativesource绑定。
类似的东西:

<CheckBox Tag="{Binding Relativesource={Relativesource Ancestortype=DataGrid}}"

抓住它,粗略地说:

 private void FSC_CheckBox_Click(object sender, RoutedEventArgs e)
    {
       var cb=(CheckBox)sender;
       var parentDataGrid = (DataGrid)cb.Tag;

这是空中代码,我没有带复选框和点击处理程序的数据网格,可以轻松地试用它,所以可能会有一些错字潜伏。