如何取消订阅WPF中的datagridcheckbox列的Check / Uncheck事件?

时间:2016-06-14 17:49:29

标签: wpf xaml events wpfdatagrid

我通过单元格样式订阅了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中执行此操作?

1 个答案:

答案 0 :(得分: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
    }