具有数据网格和数据表单的QueryableCollectionView-选择已更改问题

本文关键字:数据 选择 QueryableCollectionView- 问题 表单 数据网 网格 数据表 | 更新日期: 2023-09-27 18:23:36

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

BaseClass具有ChildClass对象的专用QueryableCollection-SCollection,以及返回此集合的属性。这两个类都实现了以下接口:INotifyPropertyChangedIDataErrorInfoIEditableObject。在我看来,我有raddatagrid,其中itemssource绑定到来自viewModelBaseClass对象中的ObservableCollection,所选项目绑定到独立的BaseClass对象selectedElem

Dataform通过以下方式绑定到当前选择的网格项:

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

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

dataGriddataform是Telerik组件。

是否有任何方法可以修复这种行为?

具有数据网格和数据表单的QueryableCollectionView-选择已更改问题

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

第一次将QueryableCollection集合直接复制到视图ViewModel,然后是大小写事件,如网格的SelectionChanged或DataFormCommitEditEndEditCancelEdit仅设置所选"BaseClass"的SCollectioninstanceViewModel 到当前SCollection

第二,使用AddingNewItemEditEndedDeletingItem DataForm方法来支持yor自己的操作逻辑,特别是CRUD和验证操作。例如在AddingNewItem手动将空的ChildClass实例添加到所选对象S收集-代码示例:

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;
        }