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

このエラーは、生徒リストデータグリッドで選択した生徒をクリックまたは選択して、学校のクラスを含むリストボックスに入れると常に発生します。

これは、リポジトリの読み込み方法を Eager ローディングから Lazy ローディングに変更したときに発生し始めました。

SelectedSchoolclass が変更された後、それに応じた生徒をロードします

生徒リストView.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 は、選択された学校のクラスのすべての生徒に設定されます。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;
        }

問題は次のとおりだと思います。

選択したドキュメントまたは生徒からジャンプして、生徒のいない学校のクラスを選択すると、ObservableCollection が遅延して作成されるため、データベースからデータを取得する場合にのみ、PupilListViewModel_Collection が NULL になるため、NULL にバインドされます。

まあ、私は遅延読み込みに固執したいと思います.DataGrid_ItemsSource=SchoolclassList/PupilListのような階層をバインドする必要はありません.Eager読み込みに使用したものです。

どうすればその例外を取り除くことができますか?

4

1 に答える 1

0

NULLの代わりに適切なタイプの空のリストを返すことができるはずです。しかし、あなたの投稿には、私たちがそれを確実に知るのに十分な情報が含まれていません。

于 2011-01-07T21:19:50.693 に答える