Laden...

In CollectionViewGroupInternal -> ItemsSource-Eigenschaft zugreifen

Letzter Beitrag vor einem Jahr 3 Posts 569 Views
In CollectionViewGroupInternal -> ItemsSource-Eigenschaft zugreifen

Hallo!

Ich hatte schon einmal eine Lösung, kann sie aber Partus nicht wieder finden...

Ich gruppiere eine ICollectionView nach einer Eigenschaft der CollectionViewSource:

CVSImportMedienListe.GroupDescriptions.Add(new PropertyGroupDescription("MediaBereich"));   // Feste Gruppierung nach dem Media-Bereich setzen

In der View definiere ich einen GroupStyle und zeige im ContainerStyle die Eigenschaft, nach der gruppiert wurde, an.

<ListView ItemsSource="{Binding ImportMedienListeView}" SelectionMode="Single" 
            Background="Transparent">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Datei-Name" Width="120" DisplayMemberBinding="{Binding MediaDateiName}" />
        </GridView>
    </ListView.View>

    <ListView.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate>
                                <Expander IsExpanded="True">
                                    <Expander.Header>
                                        <StackPanel Orientation="Horizontal">
                                            <TextBlock Text="{Binding Name}" FontWeight="Bold" VerticalAlignment="Bottom" />
                                            <TextBlock Text="{Binding ItemCount}" FontSize="22" FontWeight="Bold" ... />
                                            <TextBlock Text=" Einträge" FontSize="22" Foreground="Silver" ... />
                                        </StackPanel>
                                    </Expander.Header>
                                    <ItemsPresenter />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListView.GroupStyle>
</ListView>

Innerhalb des Styls zeigt der DataContext auf die CollectionViewGroupInternal. Deshalb kann ich nur auf die Name-Eigenschaft binden. Ich möchte jedoch auf eine andere Eigenschaft binden. Wenn ich mich richtig erinnere ging das über das (erste) Item der Items der Gruppe.

Konkret habe ich nach einer Aufzählung gruppiert. Innerhalb der (ListView-ItemsSource) Datenklasse habe ich aber auch eine adäquate Aufzählungs-Bezeichnungs Eigenschaft. Diese ist für die Anzeige natürlich Aussagekräftiger.

Wie komme ich von der CollectionViewGroupInternal zu den ItemsSource-Einträgen?

Hallo perlfred,

da du ja bereits deinen DataContext (CollectionViewGroup) kennst kannst du dir die Klasse mit den Eigenschaften ansehen auf welche du zugreifen kannst.

https://learn.microsoft.com/de-de/dotnet/api/system.windows.data.collectionviewgroup?view=windowsdesktop-7.0

Es gibt eine Eigenschaft Items über welche du dann auf die benötigte Property des ersten Elements binden können solltest.

<StackPanel Orientation="Horizontal">

        <TextBlock Text="{Binding Name}" FontWeight="Bold" VerticalAlignment="Bottom" />

        <TextBlock Text="{Binding ItemCount}" FontSize="22" FontWeight="Bold" ... />

        <TextBlock Text=" Einträge" FontSize="22" Foreground="Silver" ... />

        <TextBlock Text="{Binding Items[0].Property}" /> <----

</StackPanel>

Hilft dir das weiter?

Hallo Yankyy02!

Ja, genau das war es! Items!!! Ich hatte nach einer CollectionViewGroupInternal-Klasse gesucht. Da ist Internal einfach nur drangehangen?

Das muss unbedingt in den Wissensspeicher.

Vielen, vielen Dank!