0

私は wpf と MVVM を使用しています。viewmodel からデータテーブルにバインドされた datagrid を含むページがあります。データグリッドの自動生成列プロパティは true です。しかし、コンボボックスになるには列が必要です。だから私はそれを達成するためにデータグリッドの AutoGeneratingColumn イベントを使用します。コード ビハインド イベント メソッドでは、次のようになります。

   private void DataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
    {
       if (e.PropertyName == "Gender")
        {
            var cb = new DataGridComboBoxColumn();
            cb.ItemsSource = (DataContext as EmpDetailsWindowViewModel).GenderDataTable.DefaultView;
            cb.DisplayMemberPath = "Name";
            cb.SelectedValuePath = "Code";
            cb.SelectedValueBinding = new Binding("Gender");
            e.Column = cb;
       }
    }

ここで、新しい要件に従って、値をフィルタリングするため、およびインフラジスティックス グリッドが提供するその他の機能のために、インフラジスティックス xamDatagrid または Xamgrid を使用する必要があります。しかし AutoGeneratingColumn、両方のインフラジスティックス グリッドでイベントが見つかりません。インフラジスティックス グリッドでこの機能を実現するにはどうすればよいですか?

4

2 に答える 2

2

とても簡単です。詳細については、このリンクを参照してください。

http://help.infragistics.com/NetAdvantage/WPF/2011.1/CLR4.0/?page=xamComboEditor_Using_xamComboEditor_to_Edit_a_Field_in_xamDataGrid.html

手短に:

最初に ComboBoxItemsProvider をリソース ページに追加します。

<Window.Resources>
    <igWPF:ComboBoxItemsProvider x:Key="cmbGenderProvider">
        <igWPF:ComboBoxDataItem DisplayText="Male" Value="0"/>
        <igWPF:ComboBoxDataItem DisplayText="Female" Value="1"/>
    </igWPF:ComboBoxItemsProvider>
</Window.Resources>

XAML で DataGrid のフィールド レイアウトを編集し、XamComboEditor の ItemsProvider プロパティを上記のリソースに設定します。

<Grid>
    <igDP:XamDataGrid HorizontalAlignment="Left" DataSource="{Binding DataTable}">
        <igDP:XamDataGrid.FieldLayoutSettings>
            <igDP:FieldLayoutSettings AutoGenerateFields="False" />
        </igDP:XamDataGrid.FieldLayoutSettings>
        <igDP:XamDataGrid.FieldLayouts>
        <igDP:FieldLayout>
            <igDP:FieldLayout.Fields>
                <igDP:Field Name="Name" Label="Name"/>
                <igDP:UnboundField Name="Gender" Label="Gender">
                    <igDP:Field.Settings>
                        <igDP:FieldSettings EditAsType="{x:Type sys:Int32}" EditorType="{x:Type igWPF:XamComboEditor}">
                            <igDP:FieldSettings.EditorStyle>
                                <Style TargetType="{x:Type igWPF:XamComboEditor}">
                                    <Setter Property="ItemsProvider" Value="{StaticResource cmbGenderProvider}"/>
                                </Style>
                            </igDP:FieldSettings.EditorStyle>
                        </igDP:FieldSettings>
                    </igDP:Field.Settings>
                </igDP:UnboundField>
            </igDP:FieldLayout.Fields>
        </igDP:FieldLayout>
        </igDP:XamDataGrid.FieldLayouts>
    </igDP:XamDataGrid>
</Grid>
于 2012-11-30T16:24:30.203 に答える
1

その場合、FieldLayoutInitialized イベントをサブスクライブし、適切なコード ロジックを記述します。

私はちょうどこのコードを書いた:

private void XamDataGrid_FieldLayoutInitialized_1(object sender,   Infragistics.Windows.DataPresenter.Events.FieldLayoutInitializedEventArgs e)
    {
        var comboGenderField = e.FieldLayout.Fields["Gender"];
        if (comboGenderField != null)
        {
            var xamComboEditorStyle = new Style(typeof(XamComboEditor));
            var itemsProviderSetter = new Setter(XamComboEditor.ItemsProviderProperty,
                                                 this.FindResource("cmbGenderProvider"));
            xamComboEditorStyle.Setters.Add(itemsProviderSetter);

            comboGenderField.Settings.EditorStyle = xamComboEditorStyle;
            comboGenderField.Settings.EditAsType = typeof (int);
        }
    }

詳細については、http: //help.infragistics.com/Help/NetAdvantage/WPF/2012.2/CLR4.0/html/xamComboEditor_Setting_the_xamComboEditor_as_an_Editor_of_a_Field_Programmatically.htmlを参照してください。

于 2012-11-30T19:10:13.023 に答える