2011-03-21 8 views
0

사용자 클래스의 ObservableCollection에 바인딩 된 DataGrid가 있습니다. 컬렉션은 ViewModel의 속성이며, 그리드는 컬렉션 변경을 포함하여 잘 작동합니다.WPF에서 DataGrid.RowDetailsTemplate에서 어떻게 바인딩합니까?

나는 그렇게처럼 StackPannel에 두 개의 추가 컬렉션을 표시 할 RowDetailsTemplate를 사용하려면 :

 <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <StackPanel Name="GrcidSP" Orientation="Horizontal"> 
        <DataGrid Name="ClusterIndexGrid" AutoGenerateColumns="True" 
           ItemsSource="{Binding ClusterIndexColumns}" 
           CanUserAddRows="False" CanUserResizeRows="False" 
           Width="Auto"/> 
        <DataGrid Name="IndexGrid" AutoGenerateColumns="True" 
           ItemsSource="{Binding IndexColumns}" 
           CanUserAddRows="False" CanUserResizeRows="False" 
           Width="Auto"/> 
       </StackPanel> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 

ClusterIndexColumns 및 IndexColumns, 내부 격자의 결합 소스, 또한 뷰 모델의 모음입니다.

문제는, 내가 rowdetails를 표시 할 때 데이터 그리드가 비어있는 것입니다. 즉, 전혀로드되지 않았거나 열이나 행이 없습니다. 무슨 일이 일어나고 있는지 이해하는 입찰에서

, 내가 레이블 내부 DataGrids를 대체 :

 <DataGrid.RowDetailsTemplate> 
      <DataTemplate> 
       <StackPanel Name="GridSP" Orientation="Horizontal"> 
        <Label Content="{Binding}" Width="Auto" Background="AliceBlue"/> 
       </StackPanel> 
      </DataTemplate> 
     </DataGrid.RowDetailsTemplate> 

와 바인딩 소스 지정하지 않았 -

이 라벨은 이제 이름을 표시 {바인딩을} 외부 그리드의 소스 인 컬렉션에있는 사용자 정의 클래스의 이름입니다.

그래서 어떻게 든 내부 격자의 데이터 컨텍스트로 ViewModel로 돌아갈 필요가 있습니다.

하지만 어떻게 말해?

답변

0

좋아요, 그래서 주 격자에 표시된 사용자 정의 클래스에 ClusterIndexColumns 및 IndexColumns 컬렉션을 속성으로 추가하여이 문제를 해결했습니다. 이제 행을 클릭하면 rowdetails 영역이 열리고 내부 그리드가 잘로드됩니다.

Mode=OneWayToSource 

희망을 사용하여 뷰 모델의 속성에 selectedIndex 속성을 결합하여 주요 그리드에서 선택한 행 변경이 누군가를하는 데 도움이 때

BTW, 컬렉션이 채워집니다.