【问题标题】:How to get the checkbox column sender's datagrid parent如何获取复选框列发件人的数据网格父级
【发布时间】:2018-09-24 01:56:46
【问题描述】:

您好,我有一个数据网格(下面的 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,但由于视图框和数据模板(我猜),它不起作用。 任何建议表示赞赏。谢谢。

【问题讨论】:

    标签: wpf datagrid sender


    【解决方案1】:

    点击事件处理程序将获取发送者,您可以将其强制转换为复选框。
    我认为最简单的方法是滥用复选框上的 Tag 属性。
    这可以是您喜欢的任何旧物件。
    您可以为此使用相对源绑定。
    比如:

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

    这是空气代码,我没有带有复选框和点击处理程序的数据网格可以轻松尝试,因此可能会出现一些错字。

    【讨论】:

      猜你喜欢
      • 2019-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多