mogmo .NET

C#/XAML/VB6たまにC++についてメモ程度に書いていく。あくまで自分用。責任は取れません。

CollectionViewクラスを使ってDataGridをグループ化する

CollectionViewクラスには,グループ化および並べ替えを実装する機能を持つIEnumerableインターフェイスが用意されています。
CollectionViewSourceクラスでは,CollectionView クラスのプロパティを XAML から設定することができます。

このCollectionViewSourceクラスをDataGridのItemsSourceにバインドするとこんな感じのDataGridが作れます。(グループ化のみ実装)
f:id:mogmo811:20181105160332p:plain

CollectionViewSourceでデータを作る

ListCollectionView

// MainWindowViewModel
public class MainWindowViewModel
{
    private List<Company> _companys = new List<Company>();

    public MainWindowViewModel()
    {
        _companys = Company.GetDummyList();
        DisplayCompanys = new ListCollectionView(_companys);
    }

    public ListCollectionView DisplayCompanys { get; set; }
}

基本のDataGridを作成する

<Window x:Class="GroupingDataGrid.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:GroupingDataGrid"
        mc:Ignorable="d"
        Title="MainWindow" Height="300" Width="300">
    <Window.DataContext>
        <local:MainWindowViewModel />
    </Window.DataContext>
    <Grid>
        <DataGrid ItemsSource="{Binding Path=DisplayCompanys}">            
        </DataGrid>
    </Grid>
</Window>