为什么在DataGridTemplateColumn内部检查CheckBox之前,我的命令会被激发

本文关键字:命令 我的 之前 DataGridTemplateColumn 内部 检查 CheckBox 为什么 | 更新日期: 2023-09-27 18:24:02

常规的DataGridCheckBoxColumn似乎不允许使用命令,所以我决定使用带有复选框的DataGridTemplateColumn。问题是,我的命令在选中或取消选中复选框之前就被激发了,为什么会发生这种情况?

我的datGrid

<DataGrid x:Name="gridSpecifications" AutoGenerateColumns="False" ItemsSource="{Binding MyEntityList}">
    <DataGrid.Resources>
        <DataTemplate DataType="{x:Type DB:CoreNamedEntity}">
            <TextBlock Text="{Binding Name}"></TextBlock>
        </DataTemplate>
    </DataGrid.Resources>
    <DataGrid.Columns>
        <DataGridTextColumn Header="Id" Width="auto" Binding="{Binding Path=Id}"></DataGridTextColumn>
        <DataGridTemplateColumn Header="Description">
            <DataGridTemplateColumn.CellTemplateSelector>
                <TS:PhotometricTypeSelector
                    DataTemplateOne="{StaticResource PhantomNameTemplate}" 
                    DataTemplateTwo="{StaticResource PhantomCountTemplate}">
                </TS:PhotometricTypeSelector>
            </DataGridTemplateColumn.CellTemplateSelector>
        </DataGridTemplateColumn>
        <DataGridTemplateColumn Header="Hidden">
            <DataGridTemplateColumn.CellEditingTemplate>
                <DataTemplate>
                    <CheckBox  IsChecked="{Binding Hidden}"  Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=DataContext.HideCommand}" CommandParameter="{Binding}"></CheckBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellEditingTemplate>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <CheckBox  IsChecked="{Binding Hidden}" IsEnabled="False"></CheckBox>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>

    </DataGrid.Columns>
</DataGrid>

这是命令代码的一部分

private void HideCommandExecute(object param)
{
    InputsAccessor inputsAccessor = new InputsAccessor();
    var type = param.GetType();
    int id;
    string name = type.Name;
    var ParamId = type.GetProperty("Id").GetValue(param, null);
    bool ParamHidden = (bool)type.GetProperty("Hidden").GetValue(param, null);
    id = (int)ParamId;
    ....
}

为什么在DataGridTemplateColumn内部检查CheckBox之前,我的命令会被激发

IsChecked属性必须具有UpdateSourceTrigger=PropertyChanged,否则在调用命令之前不会设置它。

     <CheckBox IsChecked="{Binding Hidden, UpdateSourceTrigger=PropertyChanged}"
     CheckBox.Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=DataContext.HideCommand}" CommandParameter="{Binding}"></CheckBox>