这就是我得到的完整错误消息:
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 这样的绑定层次结构。
我怎么能摆脱那个例外?