2012-04-30 3 views
0

나는 내가 XAML뿐만 아니라 부모 컨트롤의로드 이벤트에 모두이 속성을 설정하려고했던 RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelectedSilverlight DataGrid : 눈금로드시 발생시키는 RowDetailsVisibilityChanged를 가져올 수 없습니다?

와 표준 실버 라이트 데이터 그리드 있습니다. 부모의 Loaded 이벤트에서 그리드의 itemsource를 설정 한 다음 선택한 인덱스를 수동으로 0으로 설정합니다. 이것은 RowDetailsVisibilityChanged 이벤트를 발생시키지 않습니다.

그러나 새 행을 클릭하여 선택을 변경하면 해당 행이 실행됩니다. 첫 번째 선택 행의 "DetailElement"에 액세스하여 데이터로 컨트롤을 채워야합니다. 그러나 해당 DetailElement 가져 오는 방법을 알고있는 유일한 방법은 RowDetailsVisibilityChanged 이벤트입니다.

void ViewAssociationUserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     viewAssociationsDataGrid.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected; 
     viewAssociationsDataGrid.ItemSource = myData; 
     viewAssociationsDataGrid.SelectedIndex = 0; 
    } 

private void viewAssociationsDataGrid_RowDetailsVisibilityChanged(object sender, System.Windows.Controls.DataGridRowDetailsEventArgs e) 
    { 
     if (viewAssociationsDataGrid.RowDetailsVisibilityMode == DataGridRowDetailsVisibilityMode.VisibleWhenSelected 
      && e.Row.DetailsVisibility == System.Windows.Visibility.Visible) 
     { 
      Grid detailElement = e.DetailsElement as Grid; 
      if (detailElement != null) 
      { 
       ListBox assocControl = detailElement.FindName("oneToManyGridPanel") as ListBox; 
       UpdateOneToManyPanel(assocControl); 
      } 
     } 
    } 

답변

1

내가 초기 발생하고 처음으로 "선택 변경"하이 훔 쳤어요 결국 있도록 명확하게이 시나리오를 처리하는 방법을 알아낼 수 없었다, 수동 화재 : 여기

내 코드입니다 가시성 변경 이벤트 나 자신 :

private void viewAssociationsDataGrid_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e) 
    { 
     if (!initialTriggerFired) //manually fire the visibility the first time 
     { 
      initialTriggerFired = true; 
      DataGrid dataGrid = sender as DataGrid; 

      int selectedIndex = dataGrid.SelectedIndex; 
      if (selectedIndex > -1) 
      { 
       DataGridColumn column = dataGrid.Columns[0]; 
       FrameworkElement fe = column.GetCellContent(dataGrid.SelectedItem); 
       DataGridRow row = fe.GetAncestorOfType<DataGridRow>(); 

       if (row != null) 
       { 
        row.DetailsVisibility = System.Windows.Visibility.Collapsed; 
        row.DetailsVisibility = System.Windows.Visibility.Visible; 
       } 
      } 
     } 
    } 
0

문제는 첫 번째 행이 때 선택 변경 등록 않도록 0으로 선택된 인덱스는 단순히 ViewAssociationUserControl_Loaded 이벤트 처리기에서 viewAssociationsDataGrid.SelectedIndex = -1을 설정하여 데이터 그리드 기본적으로 그것을 만들 것입니다 처음에 선택되었습니다.