2013-09-27 3 views
2

В моем проекте WPF я должен построить следующий DataGrid с CheckBox колонки:WPF DataGrid: DataGridCheckBoxColumn событий

XAML

<DataGrid AutoGenerateColumns="False" TargetUpdated="IsIntermediatePointFixedByBracketDataGrid_TargetUpdated"> 
     <DataGrid.Columns>    
      <DataGridCheckBoxColumn Binding="{Binding isFixedByBracket, NotifyOnTargetUpdated=True }" /> 
     </DataGrid.Columns> 
</DataGrid> 

C#

private void IsIntermediatePointFixedByBracketDataGrid_TargetUpdated(object sender, DataTransferEventArgs e) 
{ 
    DataGrid dg = (DataGrid)sender; 
    if (dg.SelectedIndex != -1 
     && ((IsFixedByBracketElement)dg.SelectedItem).isFixedByBracket != this.currentIntermediatePosition.isFixedByBracket[dg.SelectedIndex]) 
    { 
     this.currentIntermediatePosition.isFixedByBracket[dg.SelectedIndex] = 
        ((IsFixedByBracketElement)dg.SelectedItem).isFixedByBracket; 
    } 
} 

Когда я установите/снимите флажок, событие TargetUpdated выбрано, но значение изменяется только в том случае, если я выбираю и снимаю выделение соты, содержащей этот флажок. Почему это происходит? Как я могу изменить это поведение?

ответ

7

Причина этого заключается в том becuase поведение по умолчанию связывания внутри CellTemplates являются UpdateSourceTrigger = LostFocus

изменение:!

 <DataGridCheckBoxColumn Binding="{Binding isFixedByBracket, NotifyOnTargetUpdated=True , UpdateSourceTrigger=PropertyChanged }" /> 
+0

Wow Просто и ясно Спасибо! – FrancescoDS

+0

Мне нужно что-то сделать, когда установлен флажок. Я заметил, что событие, вызванное событием TargetUpdated, но не полезно, потому что там всегда есть значение 0 для переменной DataGrid.selectedIndex ... и я не понимаю, почему. Является ли TargetUpdated правильным событием для просмотра? – FrancescoDS

+0

И как я могу установить соответствующую строку флажка? – FrancescoDS

Смежные вопросы