2014-09-23 11 views
0

常規的DataGridCheckBoxColumn似乎不允許使用命令,所以我決定使用DataGridTemplateColumn和一個複選框。問題是我的命令被激發之前,可​​以選擇或取消選擇複選框爲什麼會發生這種情況?爲什麼我的命令在我的CheckBox在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; 
    .... 
} 
+0

檢查屬性,它會導致自動回發? – alykins 2014-09-23 18:02:56

+0

在命令中顯示代碼 – 2014-09-23 18:47:37

回答

0

一部分財產器isChecked必須UpdateSourceTrigger =的PropertyChanged或者它不會設置,直到命令被調用後。

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