Infragistics XamDatagrid绑定问题

时间:2012-11-15 08:43:44

标签: wpf data-binding mvvm infragistics xamdatagrid

我有一个MVVM C#/ WPF应用程序。我想将XamDataGrid绑定到我的一个视图模型,以便用户可以定义他们想要的结果结构 - 哪个列映射到哪个变量。
我的核心拥有这样的字典 - Dictionary<string, string>,我想将它包装在ObservableCollection中并绑定到它,而不是将数据复制到DataTable。问题是,我无法以这种方式添加行(视图似乎已锁定添加)并且不保存更改。我的代码:

    <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);

2 个答案:

答案 0 :(得分:1)

为了添加行,XamDataGrid使用IEditableCollectionView。CanAddnew或IBindingList.AllowNew。

如果您对网格的DataSource使用ListCollectionView,则可以添加新行。

要将ListCollectionView与ObservableCollection一起使用,请将ObservableCollection传递给ListCollectionView,然后使用CollectionView绑定到网格。

答案 1 :(得分:0)

最终使用的是BindingListObservableCollection不允许您添加行,但BindingList确实提供了我需要的所有内容。