Groupstyle Expander per Code steuern

  • WPF

Es gibt 1 Antwort in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Groupstyle Expander per Code steuern

    Hallo Leute.

    Mein funktionierender Groupstyle soll erweitert werden. In meinem DataGrid ist folgender Groupstyle definiert.

    XML-Quellcode

    1. <DataGrid.GroupStyle>
    2. <GroupStyle>
    3. <GroupStyle.ContainerStyle>
    4. <Style TargetType="{x:Type GroupItem}">
    5. <Setter Property="Margin" Value="0,0,0,5"/>
    6. <Setter Property="Template">
    7. <Setter.Value>
    8. <ControlTemplate TargetType="{x:Type GroupItem}">
    9. <Expander IsExpanded="True"
    10. BorderThickness="1,1,1,5">
    11. <Expander.Header>
    12. <DockPanel>
    13. <TextBlock FontWeight="Bold"
    14. Text="{Binding Path=Name}"
    15. Margin="5,0,0,0"
    16. Width="100"/>
    17. <TextBlock FontWeight="Bold"
    18. Text="{Binding Path=ItemCount}"/>
    19. </DockPanel>
    20. </Expander.Header>
    21. <Expander.Content>
    22. <ItemsPresenter />
    23. </Expander.Content>
    24. </Expander>
    25. </ControlTemplate>
    26. </Setter.Value>
    27. </Setter>
    28. </Style>
    29. </GroupStyle.ContainerStyle>
    30. </GroupStyle>
    31. </DataGrid.GroupStyle>


    Im Code ist dann eine Groupdiscription zugewiesen, die zu 3 Gruppen und somit 3 Expandern führt. Klappt auch alles!
    Nun möchte ich gerne die Möglichkeit die einzelnen Expander per Code auf und zu zuklappen. Da die Expander ja dynamisch durch die Gruppierung erstellt werden besitzen sie ja keine festen Namen auf die man zugreifen kann. Wie erreicht man diese also am besten aus dem Code, um auf die "IsExpanded" Eigenschaft zuzugreifen?

    Meine erste Idee war es mir die Child-Elements anzeigen zu lassen. Aber die Funktion gibt nur die Anzahl der direkten Childs des übergebenen Objekts zurück. VisualTreehelper.GetChildCount(meinDatagrid)
    Wie erstellt man eine rekursive Suche durch alle Child-Elemente, die dann alle "Expander" zurückgibt?

    EDIT: Leider klappt das Ganze nicht! Die Suchfunktionen aus dem Internet lieferten meist nur EINEN von 3 Expandern. Nur wenn durch einen Filter nur wenige Ergebnisse anezeigt wurden, dann lieferte die gleiche Funktion alle Expander.
    Problem: Durch die Virualisierung sind die Expander gar nicht erstellt, wenn sie nicht sichtbar (oder in unmittelbarer Nähe zum sichtbaren Bereich) sind. Also findet die Suche sie auch nicht. So wie geplant einfach per Checkbox wählen wer ein- oder ausgeblendet ist funktioniert also nicht, weil der Zugriff ist immer nur auf die sichtbaren möglich ist.

    XML-Quellcode

    1. <FrameworkElement x:Name="dummyElement" Visibility="Collapsed"/>

    und dann im obigen XAML-Code die Zeile wie folgt anpassen lässt dann alle gleichzeit erscheinen / verschwinden:

    XML-Quellcode

    1. <Expander IsExpanded="{Binding DataContext.Expa, Source={x:Reference dummyElement}}"


    Alternativ wäre dann noch die Bindung an neue Propertys fürs aufklappen in der Collection möglich. Aber das gefällt mir nicht.

    Vielleicht hilft die Info ja mal jemandem.

    Gruß
    eddi

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „eichseinet“ ()

    eichseinet schrieb:

    Alternativ wäre dann noch die Bindung an neue Propertys fürs aufklappen in der Collection möglich. Aber das gefällt mir nicht.

    Tja, das ist aber der Weg den man in der Welt der WPF gehen soll und muss.
    die WPF ist auf Binding aufgebaut, folglich ist Binding IMMER der Richtige Weg.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##