1

我有一个数据网格。它的 ItemsSource 通过 ViewModel 绑定到 ModelView 的 CompositeCollection。CompositeCollection 由 2 个 ObservableCollection 组成。

网格上的显示很好。我可以看到收藏。但是,当我尝试编辑其中一行时,我遇到了崩溃 (NotSupportedException):“此视图不允许使用‘EditItem’”

如何使行可编辑?我需要能够编辑表示网格中每一行的模型视图。

这是我用来绑定到 itemssource 的 CompositeCollection 属性代码: 这不是确切的代码,因为我不允许发布确切的代码,但它与我如何制作集合的逻辑相同

公共 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 。

我遇到了同样的问题,最后在视图模型上做了我自己的复合集合,类似于你所拥有的,如果你在你的集合中放入的只是两个可观察的集合,那么跟踪监听的变化并不难两个人的收藏都发生了变化。并使您的视图模型集合由它们两者组成

你甚至可以做我所做的肮脏的黑客攻击,重建网格绑定到的 ObservableCollection 每次集合之一发生变化(我知道这不优雅,但是当我有时间时会回去优化......即永远不会) linq 查询这个东西真的很简单。

否则,也许你可以从 CompositeCollection 派生并尝试添加 IEditableCollectionView,如果你得到这个工作一定要让我知道。

这是datagrid论坛上的相同问题

于 2009-11-17T05:43:34.957 回答