2013-01-22 1 views
0

행이 내 DataGrid에 선택되면 상세한 뷰를 생성해야합니다.Dyamnic DataGrid에서 선택한 행의 상세보기

DataGrid의 헤더를 가져와 내 세부보기 그리드 Label에 할당하는 방법은 무엇입니까? 및 레이블 근처의 텍스트 블록은 선택한 행의 헤더 값을 무시해야합니다.

내 DataGrid의 헤더는 고정되어 있지 않습니다. 런타임시 변경 될 수 있습니다. 나는 내 DataGrid의 itemsource를 Ienumerable 컬렉션으로 바인딩했다.

내 문제를 해결할 수 있다면 미리 감사드립니다.

업데이트 : 내 코드에서

<my:DataGrid 
           Grid.Row="0" 
           x:Name="dataGrid1" 
           Width="auto" 
           AutoGenerateColumns="True" CanUserAddRows="True"    Margin="0,0,0,0" 
           MouseRightButtonUp="dataGrid1_MouseRightButtonUp" /> 

뒤에 IEnumerable을 수집을 결합하고있다.

this.dataGrid1.ItemsSource = objref.Result; 
//Where objref.Result is Ienumerable collection 

그런 다음 XAML 내 상세보기에서
      <Label>Date:</Label> 
          <TextBlockName="data" 
         Text="{Binding SelectedItem.date, ElementName=dataGrid1}" /> 
          <Label>Username:</Label> 
          <TextBlock Name="username" 
         Text="{Binding SelectedItem.username, ElementName=dataGrid1}" 
         /> 

그냥 열 머리글을 하드 코딩. 변경 될 수 있습니다. 어떻게 처리 할 수 ​​있습니까?

+0

사용중인 코드 중 일부를 제공 할 수 있습니까? – JoanComasFdz

+0

@JoanComasFdz : 내 질문을 업데이트했습니다. ur 관심을 가져 주셔서 감사합니다. – BinaryMee

답변

0

올바른 헤더를 생성하는 모든 필드를 나열하는 작업은 이미 그리드에서 수행됩니다. 상세보기는 종종 한 행에 들어 가지 않는 이미지 나 다른 것들을 보여주기 위해 사용됩니다.

어쨌든 objref의 결과 유형을 알지 못한다고 가정합니다. 속성 이름과 속성 값을 나타내는 객체를 생성

  1. : 따라서 당신은에 반사를 사용해야합니다.
  2. 선택한 항목이 변경되면 공용 속성을 가져옵니다.
  3. 이 공용 속성 목록을 새 클래스 목록으로 변환하십시오.
  4. 데이터 형식을 사용하여 자세한보기로 표시하십시오.
  5. 표시하려는 정보를 나타내는

클래스 :

public class PropertyInformation 
{ 
    public string Name { get; set; } 

    public object Value { get; set; } 
} 

속성 목록을 가져 A 컨버터를 :

public class PropertiesLister :IValueConverter 
{ 
    private const BindingFlags Flags = BindingFlags.Instance | BindingFlags.Public; 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return value.GetType() 
      .GetProperties(Flags) 
      .Select(pi => new PropertyInformation 
      { 
       Name = pi.Name, 
       Value = pi.GetValue(value, null) 
      }); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

속성 정보와 XAML에서 컨버터를위한 템플릿입니다 :

<Window.Resources> 
    <DataTemplate x:Key="UserDataTemplate"> 
     <StackPanel Orientation="Horizontal"> 
      <Label Content="{Binding Name}"/> 
      <Label Content="{Binding Value}" /> 
     </StackPanel> 
    </DataTemplate> 

    <Test_DataGridDetailedView:PropertiesListerConverter x:Key="toListConverter" /> 

</Window.Resources> 

상세보기 변환기 사용 :

<DataGrid ItemsSource="{Binding Customers}" 
      AutoGenerateColumns="True"> 
    <DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <ItemsControl 
       x:Name="UserList" 
       ItemTemplate="{StaticResource UserDataTemplate}" 
       ItemsSource="{Binding Converter={StaticResource toListConverter}}" 
       /> 
     </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
</DataGrid> 
관련 문제