1

MVVM C#​​/WPF アプリがあります。XamDataGrid をビュー モデルの 1 つにバインドして、ユーザーが結果の構造 (どの列をどの変数にマップするか) を定義できるようにします。
私のコアはそのようなディクショナリ - を保持しており、データを にコピーするのではなく、 でDictionary<string, string>ラップしてこれにバインドしたいと考えています。問題は、この方法で行を追加できず (追加のためにビューがロックされているようです)、変更が保存されないことです。私のコード: ObservableCollectionDataTable

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

2 に答える 2

1

行を追加するために、 XamDataGrid はIEditableCollectionView .CanAddnew または IBindingList.AllowNew を使用します。

グリッドの DataSource にListCollectionViewを使用すると、新しい行を追加できます。

ObservableCollection で ListCollectionView を使用するには、ObservableCollection を ListCollectionView に渡し、CollectionView を使用してグリッドにバインドします。

于 2012-11-15T14:19:34.273 に答える
0

最終的にうまくいったのは、BindingList. ObservableCollection行を追加することはできませんが、BindingList必要なものはすべて提供されます。

于 2012-11-19T06:18:20.883 に答える