2

我有一个 mvvm 解决方案。在我的viewModel我有一个QueryableCollectionViewBaseClass对象和一个独立BaseClass元素(我们称之为 seletedElem)。

具有对象的BaseClass私有-和返回此集合的属性。这两个类都实现了以下接口: , , . 在我看来,我将其绑定到来自的对象,并且选定的项目绑定到独立对象 - 。QueryableCollectionChildClassSCollectionINotifyPropertyChangedIDataErrorInfoIEditableObjectraddatagriditemssourceObservableCollectionBaseClassviewModelBaseClassselectedElem

Dataform 以这种方式绑定到当前选定的网格项:

ItemsSource="{Binding ElementName=xxx,Path=DataContext.seletedElem.SCollection}"

然后在第一个 DataGrid 的选择更改事件之前,或者在将新项目插入到网格之后,当我按下raddataform当前项目的添加按钮时,SCollection它始终是一个空类型的项目ChildClass,但是在网格的选择更改事件之后(当一个选择了现有项目)的当前项目SCollection始终为空,我无法编辑它的属性。

和是dataGridTelerikdataform组件。

有没有办法解决这种行为?

4

1 回答 1

1

我找到了两种解决方法来处理这种情况,但它们并没有解决根本问题。我会在这里输入它们,它们可能对某人有用。

1st 将QueryableCollectionSCollection 直接复制到他的视图 ViewModel,然后是网格SelectionChanged或 DataForm 等案例事件,CommitEdit只需将所选“BaseClass” 的 SCollection 设置为当前的 SCollectionEndEditCancelEditinstanceViewModel

2nd 使用AddingNewItem, EditEnded,DeletingItem DataForm方法来支持你自己的操作逻辑,特别是 CRUD 和验证操作。因此,例如 AddingNewItem手动将空 ChildClass 实例添加到所选对象 SCollection 集合 - 代码示例:

public void OnAddingNewItem(object sender, AddingNewItemEventArgs e)
        {
            ChildClass item = new ChildClass();
            var queryable = SelectedBaseObject.SCollection.OfType<ChildClass>().ToList();

            queryable.Add(item);

            SelectedBaseObject.SCollection = new QueryableCollectionView(new ObservableCollection<ChildClass>(queryable));


            ((RadDataForm) sender).BeginEdit();
            e.Cancel = true;
        }
于 2013-07-17T14:45:25.617 回答