2012-06-18 4 views
0

DataGrid Shipments 및 Products가 있습니다. 발송물은 항상 표시되며 각 발송물의 제품은 RowDetails에 표시되며 행을 두 번 클릭하면 표시됩니다. 데이터 격자에서 DataGrid에서 CheckBox를 확인하면 RowDetails의 모든 확인란을 선택해야합니다.

나는 정의 확인란 열을 사용하고 있습니다 :

<DataGridTemplateColumn> 
    <DataGridTemplateColumn.Header> 
     Copy 
    </DataGridTemplateColumn.Header> 
    <DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <CheckBox IsChecked="{Binding Path=DoCopy, Mode=TwoWay, 
      UpdateSourceTrigger=PropertyChanged}" 
     </DataTemplate> 
    </DataGridTemplateColumn.CellTemplate> 
</DataGridTemplateColumn> 

<DataGrid.RowDetailsTemplate> 같은 열이 있습니다. 내가 찾고있는 "메인"체크 상자가 선택되었을 때 세부 사항보기의 모든 항목을 확인하는 것입니다.

저는 Shipment 클래스와 Product 클래스가 있습니다. 두 클래스 모두 DoCopy 속성을가집니다. 선적 :

Run through all products and set DoCopy = true 

문제 :

나는 데이터 그리드에서 체크 박스를 클릭는 모든 제품의 체크 박스를 체크한다. 그러나 RowDetails가 표시되지 않는 경우에만 해당됩니다. RowDetails가 표시되고 "기본"확인란을 클릭하면 선택되지만 세부 정보 확인란은 선택되지 않습니다.

또한 이전에 행 세부 정보를 열고 닫은 다음 "기본"확인란을 선택하는 경우에도 마찬가지입니다. 제품의 확인란은 선택하지 않은 상태로 유지됩니다.

배송은 해당 발송물의 모든 제품이 포함 된 List<Product>입니다.

아이디어가 있으십니까?

+0

어쩌면 당신을 도울 수 있습니다. http://stackoverflow.com/questions/6112857/handling-exclusive-or-conditions-when-binding-to-two-boolean-properties-in-xaml –

+0

RowDetails 게시 – Paparazzi

답변

0

, 사람

아래 내 샘플 코드를 참조하십시오. INotifyPropertyChanged을 구현하는 것을 잊어 버린 것 같습니다. 이제는 정상적으로 작동합니다. 감사 :-)

0

thakrage, 당신이 Docopy이 = true 또는 당신이 좋아 watever 설정할 수 있습니다 경우에, 모든 "복사"체크 상자 행에 대한 이벤트를 클릭하여 사용이 처리하는 가장 쉬운 방법은 ...

다음을 정의 확인란을 선택하고 데이터 마디처럼 체크 상자를 놓고 클릭 이벤트를 버블 링하여 모든 행을 검사하도록 여백을 설정하십시오. 코드 숨김에서

<CheckBox Name="chkbox_chkall" Click="chkbox_chkall_Click" Content="Check all" BorderBrush="#FF828282" Foreground="#FF5B585A"/> 

<DataGridTemplateColumn.CellTemplate> 
    <DataTemplate> 
     <CheckBox IsChecked="{Binding Path=DoCopy, Mode=TwoWay, 
     UpdateSourceTrigger=PropertyChanged}" Click="chkBoxRow_Click" 
    </DataTemplate> 

: 나는 그것을 가지고

private void chkbox_chkall_Click(object sender, RoutedEventArgs e) 
    { 
     CheckBox chkbox_chkall = sender as CheckBox; 
     foreach (OnlineActivatedProducts rowItem in (grdProducts.ItemsSource)) 
     { 
      CheckBox chk = grdProducts.Columns[6].GetCellContent(rowItem) as CheckBox; 
      if (chkbox_chkall.IsChecked == true) 
      { 
       chk.IsChecked = true; 
      } 
      else 
      { 
       chk.IsChecked = false; 
      } 
      chkBoxRow_Click(chk, e); // which bubbles each rows checked/unchecked event 
     } 
    } 

    private void chkBoxRow_Click(object sender, RoutedEventArgs e) 
    { 
     if (chkBoxContent.IsChecked.Value) 
     { 
      //if checked do something here 
     } 
     else if (!chkBoxContent.IsChecked.Value) 
     { 
      //if unchecked do something here 
     } 
    } 
2

다음 코드는 저에게 효과적입니다. 일부 이벤트에서 DataGrid의 모든 체크 상자를 선택하기 만하면됩니다. 다음 코드는 단순히 DataGrid 안의 모든 확인란을 선택했습니다. 제 경우 열 0은 체크 박스 열입니다

private void SelectAll() 
    { 
     for (int i = 0; i < dgVehicle.Items.Count; i++) 
     { 
      DataGridRow row = (DataGridRow)dgVehicle.ItemContainerGenerator.ContainerFromIndex(i); 

      if (row != null) 
      { 
       CheckBox chk = dgVehicle.Columns[0].GetCellContent(row) as CheckBox; 
       chk.IsChecked = true; 
      } 
     } 
    } 
관련 문제