簡體   English   中英

在Datagrid WPF上對數據分組

[英]Grouping data on Datagrid wpf

我想用一個包含組名和內部所有ClassMate名稱的擴展器對數據進行重新分組。

這是我班的小組:

public class Group{ 
public List<ClassMate> CLGroup { get; set; }
public string GroupName { get; set; }}

我的班級同學:

public class ClassMate: INotifyPropertyChanged{
public string Name { get; set; }
public string DisplayName { get; set; }}

我嘗試使用此Xaml進行此操作,但我不知道為什么它不起作用

<DataGrid x:Name="gridMates"  ItemsSource="{Binding Groups }"  >
    <DataGrid.GroupStyle>
        <!-- Style for groups at top level. -->
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True" >
                                    <Expander.Header>
                                        <DockPanel>

                                        <TextBlock Text="{Binding Path=GroupName}" />
                                    </DockPanel>
                                    </Expander.Header>
                                    <Expander.Content>
                                        <ItemsControl ItemsSource="{Binding Path=CLGroup}">
                                            <ItemsControl.ItemTemplate>
                                                <DataTemplate>
                                                    <StackPanel>
                                                        <TextBlock   Text="{Binding Path=DisplayName}"/>

                                                    </StackPanel>

                                                </DataTemplate>
                                            </ItemsControl.ItemTemplate>
                                        </ItemsControl>
                                    </Expander.Content>
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>

    </DataGrid.GroupStyle>

我究竟做錯了什么? 謝謝

您需要將ItemsSource屬性綁定到分組的源集合。 最簡單的方法是使用CollectionViewSource

<Grid>
    <Grid.Resources>
        <CollectionViewSource x:Key="groups" Source="{Binding Groups}">
            <CollectionViewSource.GroupDescriptions>
                <PropertyGroupDescription PropertyName="GroupName" />
            </CollectionViewSource.GroupDescriptions>
        </CollectionViewSource>
    </Grid.Resources>
    <DataGrid x:Name="gridMates" ItemsSource="{Binding Source={StaticResource groups}}" AutoGenerateColumns="False">
        <DataGrid.GroupStyle>
            <GroupStyle>
                <GroupStyle.ContainerStyle>
                    <Style TargetType="{x:Type GroupItem}">
                        <Setter Property="Template">
                            <Setter.Value>
                                <ControlTemplate TargetType="{x:Type GroupItem}">
                                    <Expander IsExpanded="True" >
                                        <Expander.Header>
                                            <DockPanel>
                                                <TextBlock Text="{Binding Path=Name}" />
                                            </DockPanel>
                                        </Expander.Header>
                                        <Expander.Content>
                                            <ItemsControl ItemsSource="{Binding Path=Items[0].CLGroup}">
                                                <ItemsControl.ItemTemplate>
                                                    <DataTemplate>
                                                        <StackPanel>
                                                            <TextBlock Text="{Binding Path=DisplayName}"/>
                                                        </StackPanel>
                                                    </DataTemplate>
                                                </ItemsControl.ItemTemplate>
                                            </ItemsControl>
                                        </Expander.Content>
                                    </Expander>
                                </ControlTemplate>
                            </Setter.Value>
                        </Setter>
                    </Style>
                </GroupStyle.ContainerStyle>
            </GroupStyle>
        </DataGrid.GroupStyle>
    </DataGrid>
</Grid>

XAML設計

<Window.Resources>
    <Style x:Key="groupheaderstyle" TargetType="{x:Type GroupItem}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type GroupItem}">
                    <Expander x:Name="exp" IsExpanded="True" Background="White" Foreground="Black">
                        <Expander.Header>
                            <TextBlock Text="{Binding Gropname}" />
                        </Expander.Header>
                        <ItemsPresenter />
                    </Expander>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</Window.Resources>
<DataGrid x:Name="dgdata" HorizontalAlignment="Left" Height="269" VerticalAlignment="Top" Width="292">
    <DataGrid.GroupStyle>
        <GroupStyle ContainerStyle="{StaticResource groupheaderstyle}">
            <GroupStyle.Panel>
                <ItemsPanelTemplate>
                    <DataGridRowsPresenter />
                </ItemsPanelTemplate>
            </GroupStyle.Panel>
        </GroupStyle>
    </DataGrid.GroupStyle>
</DataGrid>

XAML設計

public class group
    {
        public string groupname { get; set; }
        public string CLgroup { get; set; }
        public string displayname { get; set; }
    }
    public Window4()
    {
        InitializeComponent();
        ObservableCollection<group> samdata = new ObservableCollection<group>
        {
            new group{groupname="Group1",CLgroup="xxx",displayname="demo1"},
            new group{groupname="Group1",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group1",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group2",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group2",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group2",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group3",CLgroup="zzz",displayname="demo3"},
            new group{groupname="Group3",CLgroup="yyy",displayname="demo2"},
            new group{groupname="Group3",CLgroup="yyy",displayname="demo2"},
        };          
        ListCollectionView collection = new ListCollectionView(samdata);
        collection.GroupDescriptions.Add(new PropertyGroupDescription("groupname"));
        dgdata.ItemsSource = collection;
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM