Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Seltsamer Darstellung vom Expander-Header beim DataGrid Grouping
Platoon
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: NRW

Themenstarter:

Seltsamer Darstellung vom Expander-Header beim DataGrid Grouping

beantworten | zitieren | melden

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?
Attachments
.....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....
private Nachricht | Beiträge des Benutzers
Papst
myCSharp.de - Experte



Dabei seit:
Beiträge: 355
Herkunft: Kassel

beantworten | zitieren | melden

Ins blaue geschossen: Dir wird die Ausgabe der "ToString()" Method angezeigt.
Dein Binding benötigt noch einen Path, um eine bestimmte Property anzuzeigen.
private Nachricht | Beiträge des Benutzers
Platoon
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

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....
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5963
Herkunft: Leipzig

beantworten | zitieren | melden

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
private Nachricht | Beiträge des Benutzers
Platoon
myCSharp.de - Member



Dabei seit:
Beiträge: 46
Herkunft: NRW

Themenstarter:

beantworten | zitieren | melden

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....
private Nachricht | Beiträge des Benutzers