このトピックでは、ビュー モデルで合計統計とグループ統計を定義し、グリッド コントロールに表示する方法について説明します。
ビューモデルで統計を指定する
1. GridControl に表示する統計タイプの SummaryItemType 列挙を作成します。
public enum SummaryItemType { Max, Count, None }
2. グリッド統計記述クラスの作成
public class Summary : BindableBase {
public Summary(SummaryItemType type, string fieldname) {
Type = type;
FieldName = fieldname;
}
public SummaryItemType Type { get; }
public string FieldName { get; }
}
3. View Modelで合計およびグループ統計コレクションを指定します。
public class CustomersViewModel : ViewModelBase {
public CustomersViewModel() {
// ...
TotalSummary = new ObservableCollection<Summary>() {
new Summary(SummaryItemType.Count, nameof(Customer.Name)),
new Summary(SummaryItemType.Max, nameof(Customer.Visits))
};
GroupSummary = new ObservableCollection<Summary>() {
new Summary(SummaryItemType.Count, nameof(Customer.Name))
};
}
// ...
public ObservableCollection<Summary> TotalSummary { get; }
public ObservableCollection<Summary> GroupSummary { get; }
}
GridControl が Totalsummary および Groupsummary コレクションの変更を参照する必要がある場合、これらのコレクションは INotifyCollectionChanged インターフェイスを実装する必要があります。
統計テンプレートの作成
1. 統計タイプ (Min、Max、Count) を指定し、 SummaryItemBase.summaryType プロパティを SummaryItemType 列挙値に設定します。 SummaryItemType 列挙値を SummaryItemType 列挙値にマップする ObjectToObjectConverter を作成します。
<Window ...
xmlns:dxmvvm="http://schemas.devexpress.com/winfx/2008/xaml/mvvm">
<Window.Resources>
<dxmvvm:ObjectToObjectConverter x:Key="SummaryTypeConverter">
<dxmvvm:MapItem Source="Max" Target="Max" />
<dxmvvm:MapItem Source="Count" Target="Count" />
<dxmvvm:MapItem Source="None" Target="None" />
</dxmvvm:ObjectToObjectConverter>
</Window.Resources>
<!-- ... -->
</Window>
2. 統計を生成するためのテンプレートを作成する
SummaryTypeConverter を使用して、 SummaryItemBase.summaryType プロパティの Converter パラメーターを指定します。
GridControl 統計プロパティにバインドする場合は、DependencyObjectExtensions.DataContext 添付プロパティを使用します。この追加プロパティはデータを同期し、バインドされたプロパティを更新してグリッドのパフォーマンスを向上させます。
<Window.Resources>
<DataTemplate x:Key="SummaryTemplate">
<ContentControl>
<dxg:GridSummaryItem FieldName="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).FieldName, RelativeSource={RelativeSource Self}}"
SummaryType="{Binding Path=(dxci:DependencyObjectExtensions.DataContext).Type, RelativeSource={RelativeSource Self}, Converter={StaticResource SummaryTypeConverter}}"/>
</ContentControl>
</DataTemplate>
</Window.Resources>
GridControl でのビュー モデル統計の表示
1. TotalsummarySource プロパティと GroupsummarySource プロパティを合計統計コレクションとグループ統計コレクションにバインドします。
2. TotalsummaryGeneratorTemplate プロパティと GroupsummaryGeneratorTemplate プロパティをテンプレート生成統計に設定します
3. DataViewBase.TotalsummaryPosition プロパティを Top および Bottom に設定して、合計概要パネルを表示します。
<dxg:GridControl ...
TotalSummarySource="{Binding TotalSummary}"
GroupSummarySource="{Binding GroupSummary}"
TotalSummaryGeneratorTemplate="{StaticResource SummaryTemplate}"
GroupSummaryGeneratorTemplate="{StaticResource SummaryTemplate}">
<dxg:GridControl.View>
<dxg:TableView TotalSummaryPosition="Bottom"/>
</dxg:GridControl.View>
</dxg:GridControl>