2009-04-12 18 views
3

Ich versuche ein Datagrid zu implementieren, das wie eine Ordnerstruktur funktioniert (d. H. Jede Zeile repräsentiert einen Ordner und die Detailansicht ist ein anderes Datagrid, das Dateien im Ordner anzeigt). Ich habe versucht, meinen Code für Einfachheit zu trimmen, so könnte es Fehler sein, aber hier ist mein Grund XAML Layout:Wie würde ich einen Datagrid-Detailbereich durch einen Klick erweitern?

<my:DataGrid Name="dataGrid1" AutoGenerateColumns="False" ItemsSource="{Binding}"> 
    <my:DataGrid.RowDetailsTemplate> 
     <DataTemplate> 
      <my:DataGrid ItemsSource="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type my:DataGrid}}, Path=SelectedItem.Files}" AutoGenerateColumns="False" HeadersVisibility="None"> 
       <my:DataGrid.Columns> 
        <my:DataGridTextColumn Binding="{Binding Path=FileName}" /> 
        <my:DataGridTextColumn Binding="{Binding Path=FSize}" /> 
       </my:DataGrid.Columns> 
      </my:DataGrid> 
     </DataTemplate> 
    </my:DataGrid.RowDetailsTemplate> 
    <my:DataGrid.Columns> 
     <my:DataGridTemplateColumn CanUserResize="False" CanUserSort="False" Width="16"> 
      <my:DataGridTemplateColumn.CellTemplate> 
       <DataTemplate> 
        <Button Click="Button_Click_1"> 
         <Image Source="resources/+.ico" /> 
        </Button> 
       </DataTemplate> 
      </my:DataGridTemplateColumn.CellTemplate> 
     </my:DataGridTemplateColumn> 
     <my:DataGridTextColumn Header="Name" Binding="{Binding Path=Name}" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 

Ich versuche, die Taste, um die Details Reihe erweitern zu haben, aber ich bin nicht sicher, wie die Zeile zu referenzieren ist:

private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     // how do I reference a row here? 
     DataGridRow row = ? 
     // so I can do this: 
     if (row.DetailsVisibility == Visibility.Collapsed) 
      row.DetailsVisibility = Visibility.Visible; 
     else 
      row.DetailsVisibility = Visibility.Collapsed; 
    } 

Hoffentlich ist die Frage klar ... Danke.

Antwort

6
private void Button_Click_1(object sender, RoutedEventArgs e) 
    { 
     DependencyObject obj = (DependencyObject)e.OriginalSource; 
     while (!(obj is DataGridRow) && obj != null) 
      obj = VisualTreeHelper.GetParent(obj); 

     if(obj is DataGridRow) 
      (obj as DataGridRow).DetailsVisibility = Visibility.Visible; 
    } 

... et voilà

Verwandte Themen