Announcement

Collapse
No announcement yet.

[WPF] DataGrid in DataGridRowDetails ansprechen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] DataGrid in DataGridRowDetails ansprechen

    Moin,

    Ich finde keinen sinnvollen Weg, auf ein DataGrid zuzugreifen, dass sich in den RowDetails einer übergeordneten DataGrid befindet.

    Verkürztes XAML:
    HTML Code:
    <DataGrid Grid.Row="1" Name="dgOrders">
        <DataGrid.Columns>
            ...
        </DataGrid.Columns>
    
        <!-- DataGridRowDetails -->
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
    
                    <DataGrid Grid.Column="1" Margin="0 0 0 15" Name="dgPositions">
                        <DataGrid.Columns>
                            ...
                        </DataGrid.Columns>
                    </DataGrid>
                </Grid>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>
    Auf die dgOrders kann ich problemlos zurückgreifen, aber bei der dgPositions sagt er mir, dass das im aktuellen Kontext nicht vorhanden ist.
    Bei der Suche im Web meine ich verstanden zu haben, dass die RowDetails im aktuellen DataContext vor dem Zeichnen der Komponenten nicht existent ist?!

    Die Frage ist, wie ich auf die innere DataGrid zugreifen kann, aus dem Programmcode heraus.
    Es geht mir darum, dass in den Positionen eine Checkbox ist. Sobald man diese klickt, soll das Model der zugehörigen DataRow eine Wertänderung erfahren.

    In der äußeren DataGrid ist das kein Problem, aber bei der inneren finde ich keine passende Möglichkeit.

    Hat da jemand einen Tipp?

    Danke und Gruß
    Arne
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Ich habe erstmal eine Lösung gefunden, die vermutlich nicht sehr elegant ist, aber funktioniert.

    Das ganze wird aus einem Click-Event einer CheckBox in der inneren DataGrid ausgelöst:
    Code:
    var parent = e.Source as DependencyObject;
    do { parent = VisualTreeHelper.GetParent(parent); } while (parent.GetType() != typeof(DataGrid));
    
    var myGrid = parent as DataGrid;
    Und ab da kann ich dann wieder auf alle Rows und Columns wie gewohnt zugreifen.
    PHP rocks!
    Eine Initiative der PHP Community

    Comment

    Working...
    X