我有一个DataGrid。 它的ItemsSource通过ViewModel绑定到ModelView的CompositeCollection。 CompositeCollection由2个ObservableCollections组成。
网格上的显示很好。我能看到这个系列。 但是,当我尝试编辑其中一行时,我遇到了崩溃(NotSupportedException): “此视图不允许使用'EditItem'”
如何使行可编辑?我需要能够编辑表示网格中每一行的ModelView。
这是我用来绑定到itemssource的CompositeCollection属性代码: 这不是确切的代码,因为我不允许发布确切的代码,但它与我如何制作集合的逻辑相同
public CompositeCollection ModelViewsCollection { 得到 { CollectionContainer modelViewContainer;
CompositeCollection modelViewCollection = new CompositeCollection();
modelViewContainer= new CollectionContainer();
modelViewContainer.Collection= this.ModelViewCollection;
modelViewCollection .Add(modelViewContainer);
modelViewContainer = new CollectionContainer(); modelViewContainer.Collection = this.ModelViewCollection2; modelViewCollection .Add(modelViewContainer);
return modelViewCollection;
}
}
答案 0 :(得分:2)
CompositeCollection 未实现数据网格用于编辑的 IEditableCollectionView 。
我遇到了同样的问题,最后在视图模型上做了我自己的假复合集合,类似于你所拥有的,如果你在你的集合中放入的是两个可观察的集合,它并不难以跟踪听取集合的变化。并使您的viewmodels集合由两者组成
你甚至可以做我所做的肮脏的黑客,重建ObservableCollection网格绑定到每次收集的一个变化(我知道不优雅,但生病时回去并优化,当我有时间..即从来没有)使用linq查询这个东西真的很容易。
否则也许您可以从CompositeCollection派生并尝试添加IEditableCollectionView,如果您正常工作,请务必告诉我。
这是数据网格论坛上的the same question