2012-11-30 2 views
0

wpf & MVVM으로 작업합니다. viewmodel에서 datatable에 바인딩 된 DataGrid가있는 페이지가 있습니다. DataGrid에서 자동 생성 열 속성이 true입니다. 하지만 콤보 상자가 필요해. 그래서 나는 그것을 달성하기 위해 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; 
     } 
    } 

지금 새로운 요구 사항에 따라 I 필터링 값과 Infragistics의 그리드가 제공하는 다른 기능에 대한 Infragistics의 xamDatagrid 또는 Xamgrid을 사용해야합니다. 그러나 두 Infragistics 그리드 모두에서 AutoGeneratingColumn 이벤트를 찾지 못했습니다. Infragistics 그리드에서이 기능을 어떻게 달성 할 수 있습니까?

먼저 자원 페이지

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

에 ComboBoxItemsProvider을 추가하고 필드 레이아웃 편집 :

답변

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

이 링크를 참조 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는 = "참" –