WPF: не удается сохранить значение из цели обратно в источник - PullRequest
1 голос
/ 08 января 2011

Это полное сообщение об ошибке, которое я получаю:

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

Эта ошибка всегда возникает, когда я щелкаю / выбираю из своего выбранного ученика в pupilListDataGrid в ListBox со школьными классами.

Этоначал происходить, когда я изменил свою технику загрузки из репозитория с Eager loading на Lazy loading.

Мой SelectedSchoolclass меняется, затем я загружаю соответствующих учеников My 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 установлен для всех учеников из ВЫБРАННОГО школьного класса.Мне не нужны вещи IsSynchronizedItem, потому что у меня на самом деле нет агрегированных данных из-за новых отложенных загрузочных сущностей только через идентификатор родительской сущности.

AdminViewMOdel:

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

Я предполагаю проблемувыглядит следующим образом:

Когда я прыгаю с выбранного документа или ученика и выбираю школьный класс без учеников, он привязывается к NULL, потому что моя ObservableCollection лениво создается, значит, только когда я получаю данные из базы данных, иначе PupilListViewModel_Collection имеет значение NULL.

Ну, я бы хотел придерживаться отложенной загрузки и не нуждаться в иерархии привязок, такой как DataGrid_ItemsSource = SchoolclassList / PupilList, которую я использовал для быстрой загрузки.

Как я могу избавиться от этого исключения?

1 Ответ

0 голосов
/ 08 января 2011

Похоже, вы должны иметь возможность возвращать пустой список соответствующего типа вместо NULL.Но ваше сообщение не содержит достаточно информации, чтобы мы знали это наверняка.

...