xmlns:igDP=http://infragistics.com/DataPresenter
このトピックは、 xamDataGrid コントロールで外部グルーピングを使用する方法について説明します。
このトピックの本題に入る前に、以下のトピックをお読みください。
UI の視点で、外部グルーピング機能は xamDataGrid
のデフォルトの機能 (内部など) と似ています。ユーザーは、フィールドのドラッグ ドロップしてグループ毎の領域からフィールド毎の領域にできます。
注:
外部グルーピングを使用するには、 FieldLayoutSettings の GroupByEvaluationMode を UseCollectionView オプションに設定します。以下は GroupByEvaluationMode
列挙体のオプションです。
このコード例は、 xamDataGrid の外部グルーピング機能を使用する方法を説明します。この例は、ICollectionView
を実装するため、 xamDataGrid データ ソースとして ListViewCollection を使用します。このコレクションは、 xamDataGrid にバインドされ、外部グルーピングで使用するために GroupByEvaluationMode
を UseCollectionView に設定する必要があります。
以下が含まれる新しい WPF アプリケーション プロジェクト タイプ ExternalOperations を開始します。
Infragistics アセンブリ
InfragisticsWPF4.DataPresenter.v20.1
InfragisticsWPF4.Editors.v20.1
InfragisticsWPF4.v20.1
クラス
項目、
は INotifyPropertyChanged を継承します。項目、
は INotifyPropertyChanged を継承します。このクラスの全コードは、 項目クラスのコード例を参照してください。
Utils
クラス、ランダム項目の ListCollectionView
を作成します。これはデータ ソースで、 xamDataGrid がバインドされます。このクラスの完全なコードについては、 ListCollectionView コード例の作成 トピックを参照してください。
ウィンドウの開始
ExternalGrouping.xaml
ウィンドウは、アプリケーションの開始ウィンドウとして設定します。
名前空間の定義を xamDataGrid にマークアップを配置する、ウィンドウの XAML 部分に追加します。
xmlns:igDP=http://infragistics.com/DataPresenter
xmlns:local="clr-namespace:ExternalOperations"
(プロジェクト の名前が ExternalOperations の場合。名前が異なる場合は、この定義を新しい名前に合わせて変更してください。)
以下の画像は、外部グルーピングを使用したコンパイル済みアプリケーションの描画を示します。UI の観点からすると、グループ化操作を外部で実行する場合と内部で実行する場合での違いはありません。
XAML の場合:
<Window x:Class="ExternalOperations.ExternalGrouping"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:igDP="http://infragistics.com/DataPresenter"
xmlns:local="clr-namespace:ExternalOperations"
Title="ExternalGrouping" Height="768" Width="1024">
<DockPanel LastChildFill="True">
<StackPanel Orientation="Vertical" VerticalAlignment="Stretch" DockPanel.Dock="Top">
<Button FontWeight="Bold" x:Name="btn100kExternal" Content="Bind to 100k items" Click="btn100kExternal_Click" Width="120" Margin="5"/>
<Label x:Name="lblExternalTimes" />
</StackPanel>
<igDP:XamDataGrid x:Name="xdg100kExternal" VerticalAlignment="Stretch" Grouping="xdg100kExternal_Grouping"
DataSourceResetBehavior="DiscardExistingRecords">
<igDP:XamDataGrid.FieldLayoutSettings>
<!-- Here GroupByEvaluationMode is set to UseCollectionView, in order to use the external grouping feature.-->
<igDP:FieldLayoutSettings GroupByEvaluationMode="UseCollectionView" FilterUIType="FilterRecord"/>
</igDP:XamDataGrid.FieldLayoutSettings>
<igDP:XamDataGrid.FieldSettings>
<igDP:FieldSettings AllowRecordFiltering="True" AllowSummaries="True" SummaryUIType="MultiSelect"
SummaryDisplayArea="BottomFixed" />
</igDP:XamDataGrid.FieldSettings>
</igDP:XamDataGrid>
</DockPanel>
</Window>
Visual Basic の場合:
Namespace ExternalOperations
''' <summary>
''' Interaction logic for ExternalGrouping.xaml
''' </summary>
Public Partial Class ExternalGrouping
Inherits Window
Public Sub New()
InitializeComponent()
End Sub
Private Sub btn100kExternal_Click(sender As Object, e As RoutedEventArgs)
xdg100kExternal.DataSource = Utils.CreateDataSource(100000)
End Sub
Private Sub xdg100kExternal_Grouping(sender As Object, e As GroupingEventArgs)
lblExternalTimes.Content = "Grouping..."
Dim start As DateTime = DateTime.Now
Dispatcher.BeginInvoke(DispatcherPriority.Background, New Action(Function()
lblExternalTimes.Content = "Time to group = "(DateTime.Now - start).TotalSeconds
End Function))
End Sub
End Class
End Namespace
C# の場合:
namespace ExternalOperations
{
/// <summary>
/// Interaction logic for ExternalGrouping.xaml
/// </summary>
public partial class ExternalGrouping : Window
{
public ExternalGrouping()
{
InitializeComponent();
}
private void btn100kExternal_Click(object sender, RoutedEventArgs e)
{
xdg100kExternal.DataSource = Utils.CreateDataSource(100000);
}
private void xdg100kExternal_Grouping(object sender, GroupingEventArgs e)
{
lblExternalTimes.Content = "Grouping...";
DateTime start = DateTime.Now;
Dispatcher.BeginInvoke(DispatcherPriority.Background,
new Action(
() =>
{
lblExternalTimes.Content = "Time to group = " + (DateTime.Now - start).TotalSeconds;
}
));
}
}
}
このトピックについては、以下のトピックも参照してください。