2015-11-05 91 views
0

我的應用程序有一個DataGridCheckBoxColumn,其中標題是一個複選框。 我想實現以下功能:DataGridCheckBoxColumn在Xaml中實現選中和取消選中功能

    當用戶檢查頭複選框整列應檢查
  1. 當用戶取消選中列標題時,應該取消選中整個DataGridCheckBoxColumn。
  2. 當整列被檢查並且用戶取消選中一個單元時,標題也應該被取消選中。

是否有可能實現此功能而無需編寫代碼?

這裏是我的代碼,我用事先創建DataGridCheckbox列

<DataGridCheckBoxColumn 
    Binding="{Binding Path=IsSelected,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    ElementStyle="{StaticResource DataGridCheckBoxStyle}" > 
    <DataGridCheckBoxColumn.Header> 
     <CheckBox 
      IsChecked="{Binding Path=Data.AllItemsSelected, Source={StaticResource proxy}}" 
      IsEnabled="{Binding Path=IsBusy, Converter={StaticResource BooleanNotConverter}}" /> 
    </DataGridCheckBoxColumn.Header> 
</DataGridCheckBoxColumn> 

感謝

回答

0

而不是使用列複選框的你應該使用DataGridRowHeader其意欲目的,如選擇所有列。

<DataGrid> 
    <DataGrid.RowHeaderTemplate> 
     <DataTemplate> 
      <CheckBox x:Name="selectCheckBox" 
         Margin="2,0,0,0" 
         IsChecked="{Binding Path=IsSelected, 
              Mode=TwoWay, 
              RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGridRow}}}"> 
      </CheckBox> 
     </DataTemplate> 
    </DataGrid.RowHeaderTemplate> 

    <DataGrid.CommandBindings> 
     <CommandBinding Command="SelectAll" Executed="CommandBinding_Executed" /> 
    </DataGrid.CommandBindings> 
</DataGrid> 

默認情況下,標題按鈕將僅充當SelectAll按鈕。要允許它取消選擇DataGrid.CommandBindings也被聲明爲更改SelectAll按鈕的行爲。在後面的代碼中,聲明以下處理程序:

private void CommandBinding_Executed(object sender, ExecutedRoutedEventArgs e) 
{ 
    var dg = (DataGrid)sender; 

    // You might want to do some null checking here 

    // If all items are selected, then unselect all 
    if (dg.SelectedItems.Count == dg.Items.Count) 
     dg.UnselectAll();  
    else 
     dg.SelectAll(); 

    e.Handled = true; 
}