2012-11-15 6 views
1

MVVM C#/WPF 앱이 있습니다. XamDataGrid를 내 뷰 모델 중 하나에 바인딩하여 사용자가 결과 구조를 정의하는 방법을 정의 할 수 있습니다. 즉, 어떤 열이 어떤 변수에 매핑되는지를 정의 할 수 있습니다.
내 핵심은 에 데이터를 복사하는 대신 ObservableCollection에 랩핑하고 싶습니다. 예를 들어 Dictionary<string, string>과 같은 사전을 보유하고 있습니다. 문제는,이 방법으로 행을 추가 할 수 없다는 것입니다 (보기가 추가로 잠긴 것처럼 보임). 변경 사항이 저장되지 않습니다. 내 코드 :Infragistics XamDatagrid 바인딩 문제

<igDP:XamDataGrid 
     Grid.Row="1" Grid.Column="0" 
     Name="resultStructure" 
     DataSource="{Binding VariablesDictionary, Mode=TwoWay}" 
     GroupByAreaLocation="None"> 
     <igDP:XamDataGrid.FieldLayoutSettings> 
      <igDP:FieldLayoutSettings 
       AllowFieldMoving="WithinLogicalRow" 
       AllowAddNew="True" 
       AllowDelete="True" 
       AddNewRecordLocation="OnBottomFixed" /> 
     </igDP:XamDataGrid.FieldLayoutSettings> 
    </igDP:XamDataGrid> 

뷰 모델 (관련 부분) : 추가 된 행

private ObservableCollection<DictionaryEntry> variablesDictionary; 
     public ObservableCollection<DictionaryEntry> VariablesDictionary 
     { 
      get { return variablesDictionary; } 
      set 
      { 
       variablesDictionary = value; 
       OnPropertyChanged(()=>VariablesDictionary); 
      } 
     } 

...

List<DictionaryEntry> vars = resultStructureModel.Variables.Select(x => new DictionaryEntry {Key = x.Key, Value = x.Value}).ToList(); 
      VariablesDictionary = new ObservableCollection<DictionaryEntry>(vars); 
+0

'XamDataGrid'에 대해서는 모르겠지만 일반적인'DataGrid'에서는'DataSource' 대신'ItemsSource'에 바인드해야합니다. – Rafal

+0

'XamDataGrid'에는'ItemsSource' 속성이 없습니다. – Noich

답변

0

결국 효과가있는 것은 BindingList입니다. ObservableCollection은 행을 추가 할 수 없지만 BindingList은 필요한 모든 것을 제공합니다.

1

는 XamDataGrid는 IEditableCollectionView .CanAddnew 또는 IBindingList.AllowNew 중 하나를 사용합니다 .

그리드의 DataSource에 ListCollectionView을 사용하는 경우 새 행을 추가 할 수 있습니다.

ObservableCollection과 함께 ListCollectionView를 사용하려면 ObservableCollection을 ListCollectionView로 전달한 다음 CollectionView를 사용하여 모눈에 바인딩하십시오.

관련 문제