【问题标题】:How to unsubscribe from Check/Uncheck event of datagridcheckbox column in WPF?如何取消订阅 WPF 中 datagridcheckbox 列的 Check/Uncheck 事件?
【发布时间】:2016-06-14 17:49:29
【问题描述】:

我通过单元格样式订阅了 Check/Uncheck 事件,如下所示。

   <DataGridCheckBoxColumn  x:Name="colAccept" Binding="{Binding Accepted}" Header="Accepted">
       <DataGridCheckBoxColumn.CellStyle>
          <Style>
             <EventSetter Event="CheckBox.Checked" Handler="OnChecked_Accepted"/>
             <EventSetter Event="CheckBox.Unchecked" Handler="OnUnchecked_Accepted"/>
          </Style>
        </DataGridCheckBoxColumn.CellStyle>
   </DataGridCheckBoxColumn>

我正在从后面的代码中更新绑定到此列的属性,但不希望该事件有一次触发。在winforms中,我会取消订阅该事件,然后取消选中复选框,然后重新订阅,但我怎么能在WPF xaml中做到这一点?

【问题讨论】:

    标签: wpf xaml events wpfdatagrid


    【解决方案1】:

    改为使用 DataGridTemplateColumn 更容易。

            <DataGridTemplateColumn Header="Accepted">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <CheckBox IsChecked="{Binding Mode=OneWay}" Checked="OnChecked_Accepted" Unchecked="OnUnchecked_Accepted" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
    

    在处理程序中

        private void OnUnchecked_Accepted(object sender, RoutedEventArgs e)
        {
            var cb = sender as CheckBox;
            cb.Unchecked -= OnUnchecked_Accepted;  //this line unsubscribes the event
        }
    

    【讨论】:

    • 这解决了问题,但是使用 DataGridTemplateColumn 我在使用空格键进行检查/取消检查时遇到问题。接受这个作为答案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2017-07-16
    • 2017-02-12
    • 2013-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    相关资源
    最近更新 更多