1

私はデータグリッドを持っています。その ItemsSource は、ViewModel を介して ModelView の CompositeCollection にバインドされます。CompositeCollection は、2 つの ObservableCollection で構成されます。

グリッドの表示は問題ありません。コレクションを見ることができました。ただし、行の 1 つを編集しようとすると、「'EditItem' はこのビューでは許可されていません」というクラッシュ (NotSupportedException) が発生します。

行を編集可能にするにはどうすればよいですか? グリッドの各行を表す ModelViews を編集できる必要があります。

アイテムソースにバインドするために使用する CompositeCollection プロパティ コードは次のとおりです。 正確なコードを投稿することは許可されていないため、これは正確なコードではありませんが、コレクションの作成方法と同じロジックです。

public CompositeCollection ModelViewsCollection { get { CollectionContainer modelViewContainer;

            CompositeCollection modelViewCollection = new CompositeCollection();


            modelViewContainer= new CollectionContainer();
            modelViewContainer.Collection= this.ModelViewCollection;
            modelViewCollection .Add(modelViewContainer);

modelViewContainer= 新しい CollectionContainer(); modelViewContainer.Collection= this.ModelViewCollection2; modelViewCollection .Add(modelViewContainer);

            return modelViewCollection;
        }
    }
4

1 に答える 1

3

CompositeCollectionは、データグリッドで編集に使用されるIEditableCollectionViewを実装していません。

私は同じ問題を抱えていて、あなたが持っているものと同様に、ビューモデルで独自の偽の複合コレクションを作成することになりました。コレクションに入れているのが2つの監視可能なコレクションだけである場合、聞いている変更を追跡するのは難しくありませんコレクションは両方で変更されました。ビューモデルコレクションをそれらの両方で構成する

コレクションの1つが変更されるたびにグリッドがバインドするObservableCollectionを再構築するという、私が行った汚いハックを行うこともできます(エレガントではありませんが、時間があるときに戻って最適化します..つまり決してありません) linq query このようなことは本当に簡単です。

それ以外の場合は、CompositeCollection から派生させて、IEditableCollectionView を追加してみてください。それが機能する場合は、必ずお知らせください。

これは、データグリッド フォーラムでの同じ質問です。

于 2009-11-17T05:43:34.957 に答える