Laden...

Seltsamer Darstellung vom Expander-Header beim DataGrid Grouping

Erstellt von Platoon vor 3 Jahren Letzter Beitrag vor 3 Jahren 720 Views
P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren
Seltsamer Darstellung vom Expander-Header beim DataGrid Grouping

Hallo zusammen,

ich gruppiere ein DataGrid und habe das Problem, dass der Expanderheader etwas seltsam dargestellt wird (siehe Anhang).

Mein XAML-Source schaut so aus:


   <Grid>
        <Grid.Resources>
                <CollectionViewSource x:Key="MailList" Source="{Binding Mails}">
                    <CollectionViewSource.GroupDescriptions>
                        <PropertyGroupDescription PropertyName="Sender"/>
                    </CollectionViewSource.GroupDescriptions>
                </CollectionViewSource>

                <Style x:Key="GroupHeaderStyle" TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True">
                                    <Expander.Header>
                                    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupItem}}, Source=Sender}" Foreground="WhiteSmoke"/>
                                    
                                </Expander.Header>
                                    <ItemsPresenter/>
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>

        </Grid.Resources>
        <DataGrid x:Name="dgMails" ItemsSource="{Binding Source={StaticResource MailList}}"  AutoGenerateColumns="False">
            <DataGrid.GroupStyle>
                <GroupStyle ContainerStyle="{StaticResource GroupHeaderStyle}">
                    <GroupStyle.Panel>
                        <ItemsPanelTemplate>
                            <DataGridRowsPresenter />
                        </ItemsPanelTemplate>
                    </GroupStyle.Panel>
                </GroupStyle>
            </DataGrid.GroupStyle>
            <DataGrid.Columns>
                
                <DataGridTextColumn Header="Sender" Binding="{Binding Sender}"/>
                <DataGridTextColumn Header="Empfänger" Binding="{Binding Receipient}"/>
                <DataGridTextColumn Header="Betreff" Binding="{Binding MailSubject}"/>
                <DataGridCheckBoxColumn Header="Import" Binding="{Binding ToImport}"/>
                <DataGridTextColumn Header="Anlagen" Binding="{Binding HasAttachment}">
                    
                </DataGridTextColumn>
            </DataGrid.Columns>
        </DataGrid>
    </Grid>

Wenn ich


                                    <TextBlock Text="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type GroupItem}}, Source=Sender}" Foreground="WhiteSmoke"/>

in



                                    <TextBlock Text="{Binding Sender}" Foreground="WhiteSmoke"/>


ändere, dann bleibt der Header leer weil das Property nicht gefunden wird.

Hat einer von euch eine Idee was ich da noch ändern könnte?

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

P
441 Beiträge seit 2014
vor 3 Jahren

Ins blaue geschossen: Dir wird die Ausgabe der "ToString()" Method angezeigt.
Dein Binding benötigt noch einen Path, um eine bestimmte Property anzuzeigen.

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Ich hab es jetzt (vorläufig) lösen können.

Ich habe die CollectionViewSource im CodeBehind festgelegt. Dann das XAML etwas geändert:


            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Name}" Foreground="WhiteSmoke" FontSize="14" VerticalAlignment="Bottom" />
                                                    <TextBlock Text="{Binding ItemCount}" FontSize="14" Foreground="Green" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
                                                    <TextBlock Text=" item(s)" FontSize="14" Foreground="WhiteSmoke" FontStyle="Italic" VerticalAlignment="Bottom" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>

Ich muss jetzt nur noch herausfinden, warum er bei dem TextBlock das Property "Name" akzeptiert obwohl das gar nicht existiert 😦.

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....

5.657 Beiträge seit 2006
vor 3 Jahren

Wenn ein DataBinding nicht wie erwartet funktioniert, kannst du einen DebugConverter verwenden, wie im Abschnitt "Debugging" in [Artikel] MVVM und DataBinding beschrieben.

Weeks of programming can save you hours of planning

P
Platoon Themenstarter:in
57 Beiträge seit 2017
vor 3 Jahren

Ich habe das Problem jetzt auch mit einem DataGrid lösen können.

Die CollectionViewSource wird zwar nach wie vor noch im CodeBehind erstellt, aber das DataGrid kann jetzt gruppiert werden:


            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Name}" Foreground="WhiteSmoke" FontSize="14" VerticalAlignment="Bottom" />
                                                    <TextBlock Text="{Binding ItemCount}" FontSize="14" Foreground="Green" FontStyle="Italic" Margin="10,0,0,0" VerticalAlignment="Bottom" />
                                                    <TextBlock Text=" item(s)" FontSize="14" Foreground="WhiteSmoke" FontStyle="Italic" VerticalAlignment="Bottom" />
                                                </StackPanel>
                                            </Expander.Header>
                                            <ItemsPresenter />
                                        </Expander>
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle>

.....an unhandled exception is the first way to think about your pattern of programming....
.....nur weil ich nicht weiß was dort passiert, bedeutet es nicht, dass ich nicht weiß, wie man es lösen kann - aber das ist wahrscheinlich....