バージョン

プログラムを使用して xamComboEditor をフィールドのエディターとして設定

始める前に

xamComboEditor を使用して、xamDataGrid の Field 内に項目のドロップダウン リストをエンド ユーザーに提示します。xamDataGrid 内で使用するために xamComboEditor を移植するための推奨されるアプローチは、 ComboBoxItemsProvider オブジェクトをリソースとして作成し、マークアップ拡張を使用して参照することです。このパターンは、xamDataGrid の Field 内で ComboBoxItemsProvider オブジェクトの単一インスタンスを再利用することによりオーバーヘッドを最小限に抑えます。

達成すること

プロシージャー コードを使用して、Field のエディターを xamComboEditor に設定します。

次の手順を実行します

  1. xamDataGrid の FieldLayoutInitialized イベントのイベント ハンドラを接続します。

XAML の場合:

...
<igDP:XamDataGrid … FieldLayoutInitialized="XamDataGrid1_FieldLayoutInitialized" />
...
  1. Resources セクションを Window で作成します。

XAML の場合:

...
<Window.Resources>
</Window.Resources>
...
  1. ComboBoxItemsProvider を Resources セクションに追加し、後で参照できるようにキーを指定します。

XAML の場合:

...
<igEditors:ComboBoxItemsProvider x:Key="cbipRatings">
        <!--TODO: ここで ComboBoxDataItems を追加します-->
</igEditors:ComboBoxItemsProvider>
...
  1. 5 つの ComboBoxDataItem オブジェクトを ComboBoxItemsProvider オブジェクトの Items コレクションに追加します。

各 ComboBoxDataItem オブジェクトの DisplayText プロパティと Value プロパティを設定することが必要になります。DisplayText プロパティはエンドユーザーに表示するテキストを決定し、Value プロパティは基となるデータ モデルだけでなく Cell の Value プロパティに保存される値を決定します。

XAML の場合:

...
<igEditors:ComboBoxItemsProvider.Items>
        <igEditors:ComboBoxDataItem DisplayText="5 Stars" Value="5 Stars" />
        <igEditors:ComboBoxDataItem DisplayText="4 Stars" Value="4 Stars" />
        <igEditors:ComboBoxDataItem DisplayText="3 Stars" Value="3 Stars" />
        <igEditors:ComboBoxDataItem DisplayText="2 Stars" Value="2 Stars" />
        <igEditors:ComboBoxDataItem DisplayText="1 Star" Value="1 Star" />
</igEditors:ComboBoxItemsProvider.Items>
...
  1. コード ビハインドで using/imports のディレクティブを追加します。

Visual Basic の場合:

Imports Infragistics.Windows.DataPresenter
Imports Infragistics.Windows.Editors

C# の場合:

using Infragistics.Windows.DataPresenter;
using Infragistics.Windows.Editors;
  1. FieldLayoutInitialized イベントを処理するメソッドを作成します。

Visual Basic の場合:

Private Sub XamDataGrid1_FieldLayoutInitialized(ByVal sender As Object, _
  ByVal e As _
  Infragistics.Windows.DataPresenter.Events.FieldLayoutInitializedEventArgs)
End Sub

C# の場合:

private void XamDataGrid1_FieldLayoutInitialized(object sender,
  Infragistics.Windows.DataPresenter.Events.FieldLayoutInitializedEventArgs e)
{
}
  1. FieldLayoutInitialized イベント ハンドラで Field オブジェクトのインスタンスを作成します。

Fields コレクションにインデックスを付けるためにキーとして使用できるように、 Name プロパティを設定する必要があります。BindingType プロパティを Unbound に設定します。Field の上のヘッダーにテキストを表示するために Label プロパティを設定することも可能です。

Visual Basic の場合:

Dim uField as New Field()
uField.Name = "rating"
uField.Label = "Rating"
uField.BindingType = BindingType.Unbound

C# の場合:

Field uField = new Field();
uField.Name = "rating";
uField.Label = "Rating";
uField.BindingType = BindingType.Unbound;
  1. 非バインド フィールド オブジェクトを FieldLayout の Fields コレクションに追加します。

Visual Basic の場合:

e.FieldLayout.Fields.Add(uField)

C# の場合:

e.FieldLayout.Fields.Add(uField);
  1. xamComboEditor をターゲットとする Style オブジェクトのインスタンスを作成します。

Visual Basic の場合:

Dim xamComboEditorStyle As New Style(GetType(XamComboEditor))

C# の場合:

Style xamComboEditorStyle = new Style(typeof(XamComboEditor));
  1. xamComboEditor の ItemsProviderProperty プロパティを手順 3 で作成した ComboBoxItemsProvider リソースに設定する Setter のインスタンスを作成します。

Visual Basic の場合:

Dim itemsProviderSetter As New Setter(XamComboEditor.ItemsProviderProperty, Me.FindResource("cbipRatings"))

C# の場合:

Setter itemsProviderSetter = new Setter(XamComboEditor.ItemsProviderProperty, this.FindResource("cbipRatings"));
  1. 手順 9 で作成した Style オブジェクトの Setters コレクションに Setter オブジェクトを追加します。

Visual Basic の場合:

xamComboEditorStyle.Setters.Add(itemsProviderSetter)

C# の場合:

xamComboEditorStyle.Setters.Add(itemsProviderSetter);
  1. 非バインド フィールドの FieldSettings オブジェクトの EditorStyle プロパティを作成したばかりの Style に設定します。

Visual Basic の場合:

uField.Settings.EditorStyle = xamComboEditorStyle

C# の場合:

uField.Settings.EditorStyle = xamComboEditorStyle;
  1. プロジェクトを実行します。'Rating' というラベルの Field で Cell をクリックし、xamComboEditor コントロールを使用して Cell の値を編集します。