我有一个DataGrid。它是通过ItemsSource绑定到ModelView的CompositeCollection的。CompositeCollection由2 ObservableCollections组成。
栅格上的显示很好。我能看到这些收藏品。然而,当我试图编辑其中一行时,我得到了一个崩溃(NotSupportedException):“这个视图不允许‘EditItem’”。
如何使行可编辑?我需要能够编辑表示网格中每一行的ModelViews。
下面是我用来绑定到itemssource的CompositeCollection属性代码:这不是确切的代码,因为我不允许发布确切的代码,但是对于如何生成集合,这是相同的逻辑。
公共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;
}
}发布于 2009-11-17 05:43:34
CompositeCollection不实现IEditableCollectionView,这是由数据集用来编辑的。
我也有过同样的问题,最后在视图模型上做了我自己的假复合集合,类似于您所拥有的,如果您在您的集合中所放的只是两个可观察的集合,那么很难跟踪在这两个集合上所听到的更改所做的更改。并使您的视图模型集合由这两个集合组成。
你甚至可以像我一样,重新构建网格每次改变一个集合时绑定到的ObservableCollection (我知道这不是很优雅,但当我有时间的时候,我会回去优化)。使用linq查询,这件事真的很容易。
否则,您也许可以从CompositeCollection派生并尝试添加IEditableCollectionView,如果您完成了该工作,一定要让我知道。
这是同样的问题在datagrid论坛上的文章
https://stackoverflow.com/questions/1688506
复制相似问题