2013-09-05 2 views
0

Datatable 개체에 바인딩 된 DataGrid가 있습니다. DataGrid는 열을 자동으로 생성합니다.WPF : DataGrid 검사 된 열 가져 오기

 <DataGrid 
       Name="TimeTableDataGrid" 
         AutoGeneratingColumn="TimeTableDataGrid_OnAutoGeneratingColumn" 
         ItemsSource="{Binding TimeTable,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged,IsAsync=True}" 
         EnableRowVirtualization="True" 
         EnableColumnVirtualization="True" 
         VirtualizingStackPanel.IsVirtualizing="True"> 
      </DataGrid> 

저는 AutoGeneratingColumn 이벤트를 사용하여 DataGrid 열의 체크 박스를 추가했습니다.

 private void TimeTableDataGrid_OnAutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
      e.Column.Width = new DataGridLength(_columnWidth); 
      e.Column.HeaderTemplate = (DataTemplate) Resources["HeaderTemplate"]; 

    } 

는 HeaderTemplate :

<DataTemplate x:Key="HeaderTemplate" 
        x:Name="HeaderTemplate"> 
     <CheckBox></CheckBox> 
    </DataTemplate> 

enter image description here

은 어떻게 선택하는 체크 박스 것을 확인할 수 있습니까?

답변

1

당신은 당신의 헤더 스타일을 생성하고 업데이트하여 체크 박스를 아래와 같이 할 수 있습니다

  <Style x:Key="HeaderStyle" TargetType="{x:Type DataGridColumnHeader}"> 
         <Style.Setters> 
          <Setter Property="Template"> 
           <Setter.Value> 
            <ControlTemplate TargetType="{x:Type DataGridColumnHeader}"> 

             <CheckBox Command="{Binding DataContext.MyCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{TemplateBinding Content}"></CheckBox> 


            </ControlTemplate> 
           </Setter.Value> 
          </Setter> 
         </Style.Setters> 
        </Style> 

과로 autogenererating 핸들러를 업데이트 : 당신이 체크 박스의 명령을 결합 할 수

  e.Column.Width = new DataGridLength(_columnWidth); 
      e.Column.Header = e.PropertyName; 
      e.Column.HeaderStyle = (Style)Resources["HeaderStyle"]; 

을 그래서 여기에 viewmodel 명령을 사용하고 헤더 일 수있는 고유 한 명령 매개 변수를 보냅니다. 뷰 모델에서 (string의) list를 가질 수 있습니다. 명령 핸들러에서 직접 DataTemplate이는 DataContext에 (우리의 ViewModel)에 액세스하지 않습니다에 배치 때문에, 체크 박스, 체크되지 않은 체크하는 헤더의 체크 박스를 포함하는 그 목록/

감사

+0

좋은 생각을 upate, 그래서 수 있습니다 시도했습니다 : 하지만 작동하지 않습니다 , 간단한 샘플이나 코드를 만들 수 있습니까? – Shahin

+0

왜 DataTemplate이 필요합니까? HeaderStyle로 제공된 @nit 스타일 설정은 정상적으로 작동합니다. –