关键性代码

VirtualizingPanel.IsVirtualizingWhenGrouping="True"  //在开启分组时是否进行虚拟化

界面

 <DataGrid x:Name="dataGrid1" 
                  AutoGenerateColumns="true" 
                  VerticalGridLinesBrush="{x:Null}"
                  IsReadOnly="True" 
                  CanUserReorderColumns="False" 
                  CanUserResizeRows="False" 
                  CanUserSortColumns="False"
                  EnableColumnVirtualization ="True"
                  EnableRowVirtualization ="True"                  
                  VirtualizingPanel.IsVirtualizing="True"
                  VirtualizingPanel.IsVirtualizingWhenGrouping="True"
                  ScrollViewer.CanContentScroll="True"
                  > 
            <DataGrid.GroupStyle>
                <GroupStyle>
                    <GroupStyle.HeaderTemplate>
                        <DataTemplate>
                            <StackPanel>
                                <TextBlock Text="{Binding Path=Name}" FontWeight="Bold" Padding="3"/>
                            </StackPanel>
                        </DataTemplate>
                    </GroupStyle.HeaderTemplate>
                    <GroupStyle.ContainerStyle>
                        <Style TargetType="{x:Type GroupItem}">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate TargetType="{x:Type GroupItem}">
                                        <Expander IsExpanded="False">
                                            <Expander.Header>
                                                <StackPanel Orientation="Horizontal">
                                                    <TextBlock Text="{Binding Path=Name}" />
                                                    <TextBlock Text="{Binding Path=ItemCount,StringFormat=(共{0}条)}"/>
                                                </StackPanel>
                                            </Expander.Header> 
                                            <ItemsPresenter/> 
                                        </Expander> 
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </Style>
                    </GroupStyle.ContainerStyle>
                </GroupStyle>
            </DataGrid.GroupStyle> 
        </DataGrid>

后台代码

/// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        ObservableCollection<Model> data = new ObservableCollection<Model>();

        public MainWindow()
        {
            InitializeComponent();

            dataGrid1.ItemsSource = data;
            for (int i = 0; i < 100000; i++)
            {
                Model m = CreateModel("" + i, i / 100 + "年级", (i % 2 == 0 ? "" : ""));
                data.Add(m);
            }
            ICollectionView vw = CollectionViewSource.GetDefaultView(data);
            vw.GroupDescriptions.Add(new PropertyGroupDescription("Category")); 
        }

        private Model CreateModel(string name, string cate, string sex)
        {
            Model model = new Model();
            model.Name = name;
            model.Category = cate;
            model.Sex = sex;
            return model;
        }
    }

    public class Model
    {
        //Namce Category Sex
        public string Name
        {
            get;
            set;
        }

        public string Category
        {
            get;
            set;
        }

        public string Sex
        {
            get;
            set;
        }
    }

 

posted on 2020-08-31 11:10  wq8438  阅读(1088)  评论(0)    收藏  举报