如何取消订阅 WPF 中 datagridcheckbox 列的 Check/Uncheck 事件?
How to unsubscribe from Check/Uncheck event of datagridcheckbox column in WPF?
我通过单元格样式订阅了 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 中执行此操作?
改用 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
}
我通过单元格样式订阅了 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 中执行此操作?
改用 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
}