2012-11-30 30 views
0

我使用wpf & MVVM。 我有一個頁面與datagrid綁定到來自viewmodel的數據表。在datagrid中自動生成列屬性爲true。但我需要一些coulmns來組合框。所以我使用 DataGrid的AutoGeneratingColumn事件來實現這一點。在代碼中,事件方法看起來像這樣。Infragistics xamgid或xamdatagrid中的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; 
     } 
    } 

現在按新要求我必須使用的Infragistics xamDatagrid或Xamgrid用於過濾值和一些其它特徵的Infragistics網格提供。但是我沒有在兩個infragistics網格中找到事件 AutoGeneratingColumn。如何在infragistics網格中實現這個功能?

回答

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

+0

您的代碼似乎很好地工作。但是,我覺得你上面提供的代碼有很多屬性名稱的硬編碼。在我的情況下,我有數百個屬性,如果我開始硬編碼所有的屬性名稱和某人某天改變任何一個屬性名稱我寫的代碼停止工作。 –

+0

我想要做這樣的事情。 http://bit.ly/RRrO92 查看上面提供的鏈接中的最後一個答案。 –

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> 
+0

但在我來說,我需要AutoGenerateFields =「真」 –

相關問題