バージョン

非バインド フィールドの構成

目的

このトピックでは、 xamDataPresenter™ コントロールで非バインド フィールドを作成する方法を説明します。非バインド フィールドは、計算値や複雑なプロパティの表示など、さまざまな目的に使用されます。

前提条件

このトピックをより理解するために、以下のトピックを参照することをお勧めします。

トピック 目的

このトピックでは、 xamDataGrid コントロールをページに追加する方法について説明します。

このセクションには、 xamDataGrid コントロールを使用してデータにアクセスする上で特に役立つトピックが記載されています。

このトピックの内容

フィールドの非バインドとしての構成

概要

Field を非バインドに設定するには、BindingType プロパティを Unbound に設定します。xamDataPresenter コントロールで計算値または複雑型を表示するために使用できます。基本 Field プロパティの詳細は、Fields のトピックを参照してください。

プロパティ設定

以下の表は、任意の構成とそれを管理するプロパティ設定のマップを示します。

目的: 使用するプロパティ: 設定値:

データ項目で直接定義されたプロパティにデータ項目をバインド

これがデフォルト値です。

バインディング メカニズムは、Field Name プロパティに完全に一致するデータ項目のプロパティ名を検索します。このアプローチでは、代替バインディングを使用するよりもパフォーマンスが向上します。

データ項目で直接定義されていないプロパティにデータ項目をバインド

この場合、フィールドの AlternateBinding プロパティでバインディングを指定する必要があります。

Note
注:

AlternateBinding は、デフォルトの名前のバインディングと比較して、パフォーマンスのオーバーヘッドが発生しやすく、メモリの追加も必要になります。

Fieldを非バインドに設定します。

このバインディング タイプはセル値を設定する場合に、コードの使用または式のターゲットなどバインド以外の方法を使用します。

AlternateBinding の使用でField が自動リリース バインディング オブジェクトの場合に指定します。

これがデフォルト値です。

AlternateBinding で使用する Field は、アクセスされる値のすべてのセルのバインディング オブジェクトを作成しますが、セルがスクロールアウトされ値が集計計算で必要なくなると、バインディング オブジェクトを破棄します。これにより、メモリ使用量が最小限になります。

AlternateBinding の使用でField が作成したバインディング オブジェクトを保持する場合に指定します。

このプロパティを Retain に設定すると、並べ替え、グループ化など、すべての非バインド セルの値にアクセスが必要な操作の場合でも、パフォーマンスに影響を与えません。

以下のスクリーンショットは、Bonus および Total Salary CurrencyFieldxamDataGrid コントロールで非バインドに設定する方法を示します。

Configuring Unbound Field 2.png

以下のコードはこの例を実装します。

XAML の場合:

<igDP:XamDataGrid x:Name="DataGrid" BindToSampleData="True"
                  InitializeRecord="DataGrid_OnInitializeRecord">
    <igDP:XamDataGrid.FieldLayouts>
        <igDP:FieldLayout>
            <igDP:FieldLayout.Fields>
                <igDP:Field Name="name" Label="Employee Name" />
                <igDP:CurrencyField Name="salary" Label="Salary" />
                <!-- 計算値を表示する通貨フィールドを非バインドにします -->
                <igDP:CurrencyField Name="bonus" Label="Bonus" BindingType="Unbound" />
                <igDP:CurrencyField Name="totalSalary" Label="Total Salary" BindingType="Unbound" />
            </igDP:FieldLayout.Fields>
        </igDP:FieldLayout>
    </igDP:XamDataGrid.FieldLayouts>
</igDP:XamDataGrid>

C# の場合:

private void DataGrid_OnInitializeRecord(object sender,
            Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs e)
{
    if (e.Record is DataRecord)
    {
        //現在のレコード データを取得して、
        //適切な計算を実行し、値を非バインドの通貨フィールドに割り当てます
        var dr = (DataRecord)e.Record;
        double salary = double.Parse(dr.Cells["salary"].Value.ToString());
        double bonus = (salary * 10)/100;
        double totalSalary = salary + bonus;
        dr.Cells["bonus"].Value = bonus;
        dr.Cells["totalSalary"].Value = totalSalary;
    }
}

Visual Basic の場合:

Private Sub DataGrid_OnInitializeRecord(sender As Object, e As Infragistics.Windows.DataPresenter.Events.InitializeRecordEventArgs)
    If TypeOf e.Record Is DataRecord Then
      '現在のレコード データを取得して、
      '適切な計算を実行し、値を非バインドの通貨フィールドに割り当てます
      Dim dr = DirectCast(e.Record, DataRecord)
      Dim salary As Double = Double.Parse(dr.Cells("salary").Value.ToString())
      Dim bonus As Double = (salary * 10) / 100
      Dim totalSalary As Double = salary + bonus
      dr.Cells("bonus").Value = bonus
      dr.Cells("totalSalary").Value = totalSalary
      End If
End Sub

AlternateBinding を使用してフィールド バインディングの構成

概要

データ項目で直接定義されているプロパティにバインドされていないフィールドを作成するには、フィールドを作成し、BindingType プロパティを UseAlternateBinding に設定します。フィールドの AlternateBinding および AlternateBindingRetentionMode プロパティを使用して代替バインドを構成します。

以下のスクリーンショットは、xamDataGrid コントロールで AlternateBinding プロパティの例を示します。

Configuring Unbound Field 3.png

以下のコードは、フィールドを作成し、データにバインドするために AlternateBinding プロパティの使用を紹介する例を実装します。

Models および ViewModel コードは次のファイルにあります: ProductData.cs

FieldAlternateBinding プロパティは XAML またはコード ビハインドで設定できます。

XAML で AlternateBinding の設定:

XAML の場合:

<Grid>
    <Grid.DataContext>
        <data:ProductData />
    </Grid.DataContext>
    <igDP:XamDataGrid x:Name="DataGrid"
                      DataSource="{Binding Path=Products}"
                      FieldLayoutInitialized="DataGrid_OnFieldLayoutInitialized">
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False" />
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
            <igDP:FieldLayout>
                <igDP:FieldLayout.Fields>
                    <igDP:TextField Name="ProductID" Label="Product ID" />
                    <igDP:TextField Name="ProductName" Label="Product Name" />
                    <igDP:Field Label="Category Name"
                          AlternateBinding="{Binding Path=Category.CategoryName}" />
                </igDP:FieldLayout.Fields>
            </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>
</Grid>

コード ビハインドで AlternateBinding の設定:

新しく作成されたフィールドの追加は FieldLayoutInitialized イベント ハンドラーで実行されます。

C# の場合:

private void DataGrid_OnFieldLayoutInitialized(object sender, FieldLayoutInitializedEventArgs e)
{
    var fieldDesc = new Field
    {
        Label = "Category Description",
        AlternateBinding = new Binding("Category.Description"),
     };
     e.FieldLayout.Fields.Add(fieldDesc);
}

In Visual Basic:

Private Sub DataGrid_OnFieldLayoutInitialized(sender As Object, e As FieldLayoutInitializedEventArgs)
    Dim fieldDesc = New Field() With {
            .Label = "Category Description",
            .AlternateBinding = New Binding("Category.Description")
    }
    e.FieldLayout.Fields.Add(fieldDesc)
End Sub

関連コンテンツ

トピック

このトピックの追加情報については、以下のトピックも合わせてご参照ください。

トピック 目的

このトピックでは、表示するフィールドを指定し、 xamDataPresenter コントロールでこれらのフィールドに関連するプロパティを設定するために、フィールドのレイアウトを定義する方法を説明します。

このトピックでは、 xamDataPresenter コントロールのさまざまなデータ タイプに対し、特定のエディター フィールドを簡単に構成する方法を説明します。

このトピックでは、カスタム表示のフィールドを作成し、 xamDataPresenter コントロールの TemplateField を使用してテンプレートを編集する方法を説明します。

このトピックでは、 xamDataPresenter コントロールによるフィールドの自動生成と手動生成の違いを説明します。

このトピックでは、 xamDataPresenter コントロールに対する複数の FieldLayouts を作成する方法を説明します。

このトピックでは、画像を表示させるフィールドを追加し、 xamDataPresenter コントロールで CellValuePresenter のテンプレートをオーバーライドする方法を説明します。

このトピックでは、 xamDataPresenter コントロール用にカスタマイズされたフィールドを読み込む方法を説明します。

このトピックでは、 xamDataPresenter コントロール用にカスタマイズされたフィールドを保存する方法を説明します。

このトピックでは、各フィールドの Row、Column、ColumnSpan または RowSpan をカスタマイズして、レコードを一層使いやすくなるようにレイアウトを変更する方法を説明します。

このトピックでは、レコードの方向を変更する方法について説明します。

このトピックでは、内容のフロー方向を変更する方法について説明します。

このトピックでは、データ プレゼンター フィールド エディターのコントロールを構成する方法を説明します。