为什么在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;
....
}
IsChecked属性必须具有UpdateSourceTrigger=PropertyChanged,否则在调用命令之前不会设置它。
<CheckBox IsChecked="{Binding Hidden, UpdateSourceTrigger=PropertyChanged}"
CheckBox.Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DataGrid}, Path=DataContext.HideCommand}" CommandParameter="{Binding}"></CheckBox>