带有datagrid和dataform的QueryableCollectionView - 选择已更改问题

时间:2013-07-17 08:49:12

标签: c# .net wpf telerik

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

BaseClass拥有QueryableCollection个对象的私有ChildClass - SCollection,以及返回此集合的属性。这两个类都实现了以下接口:INotifyPropertyChangedIDataErrorInfoIEditableObject。在我看来,我raddatagrid itemssource被绑定到来自ObservableCollection的{​​{1}} BaseClassviewModel对象,所选项目被绑定到独立BaseClass } object - selectedElem

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

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

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

dataGriddataform是Telerik组件。

无论如何都要解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

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

首先将QueryableCollection SCollection直接复制到他的视图中     ViewModel然后是网格的SelectionChanged或DataForm等案例事件     CommitEditEndEditCancelEdit只需设置所选“BaseClass”的SCollection      instance来自ViewModel

的当前SCollection

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

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