1

这就是我得到的完整错误消息:

System.Windows.Data Error: 8 : Cannot save value from target back to source. BindingExpression:Path=SelectedPupil; DataItem='AdministrationViewModel' (HashCode=52357250); target element is 'DataGrid' (Name=''); target property is 'SelectedItem' (type 'Object') NullReferenceException:'System.NullReferenceException

当我从学生列表数据网格中选择的学生中单击/选择到带有学校课程的列表框时,总是会发生此错误。

当我将存储库加载技术从急切加载更改为延迟加载时,这种情况开始发生。

我的 SelectedSchool 班级发生变化,然后我加载相应的学生 我的 SelectedPupil 发生变化,然后我加载相应的文件

PupilListView.xaml:

<DataGrid  
                Grid.Row="1"                   
                IsReadOnly="True"
                HeadersVisibility="Column"
                SelectedItem="{Binding SelectedPupil}"                
                ItemsSource="{Binding Path=SelectedSchoolclass.PupilListViewModel}"
                AutoGenerateColumns="False"
                >
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding FirstName}" Width="*" Header="Firstname" />
                    <DataGridTextColumn Binding="{Binding LastName}" Width="*" Header="Last name" />
                </DataGrid.Columns>
        </DataGrid

这里的 ItemSource 设置为 SELECTED schoolclass 中的所有学生。我不需要 IsSynchronizedItem 的东西,因为我真的没有聚合数据,因为新的延迟加载实体只是通过父实体的 id。

管理员视图模型:

public PupilViewModel SelectedPupil
        {
            get { return _selectedPupil; }
            set
            {
                _selectedPupil = value;
                this.RaisePropertyChanged("SelectedPupil");
                GetDocumentsForPupil();
            }
        }

private void GetDocumentsForPupil()
        {
            var documentsOC = new ObservableCollection<Document>(_docRepo.GetDocumentsByPupilId(_selectedPupil.Id));
            SelectedPupil.Documents.DocumentList = documentsOC;
        }

我想问题如下:

当我从选定的 Document 或 Pupil 跳转并选择一个没有任何学生的学校时,它绑定到 NULL,因为我的 ObservableCollection 是延迟创建的,这意味着只有当我从数据库获取数据时,PupilListViewModel_Collection 才为 NULL。

好吧,我想坚持使用延迟加载,并且不需要像我用于急切加载的 DataGrid_ItemsSource=SchoolclassList/PupilList 这样的绑定层次结构。

我怎么能摆脱那个例外?

4

1 回答 1

0

看起来您应该能够返回适当类型的空列表而不是 NULL。但是,您的帖子没有包含足够的信息,我们无法确定这一点。

于 2011-01-07T21:19:50.693 回答