Я занимаюсь разработкой приложения Silverlight, которое содержит страницу, которая выглядит следующим образом:
--------------------------------
| | |
| DataGrid:| DataForm: |
| list of | selected |
| objects | object's details |
| | |
--------------------------------
Пользователь выбирает объект из DataGrid, и детали этого объекта отображаются и могут быть отредактированы в DataForm справа.
И DataGrid, и DataForm связаны с одним и тем же PagedCollectionView
.
Если я не применяю фильтр к этому PagedCollectionView, все в порядке. Однако, когда я применяю фильтр, а затем пытаюсь отредактировать и сохранить детали объекта, где-то в функции RaisePropertyChanged
возникает исключение NullReferenceException, которое вызывает событие PropertyChanged редактируемого объекта. Это исключение происходит от DataForm.OnCurrentItemPropertyChanged
и вызвано тем фактом, что CurrentItem объекта DataForm внезапно null
.
В чем причина этой ошибки и как ее избежать?
ОБНОВЛЕНИЕ: обходной путь
Обходной путь, чтобы избежать этой проблемы: в редактируемом объекте вместо немедленного вызова RaisePropertyChanged
при изменении значения свойства этот метод вызывается с задержкой в 100 мс. Таким образом, DataForm и PCV могут творить свое волшебство, и только после того, как они закончили, выполняются вызовы RaisePropertyChanged.
Это, вероятно, каким-то образом предотвращает некоторые проблемы синхронизации / синхронизации между PCV, DataForm и редактируемым объектом, но я чувствую себя грязно даже из-за того, что ввел этот обходной путь :) Кто-нибудь может использовать эту информацию, чтобы выяснить, в чем проблема?
XAML
<controls:DataGrid
ItemsSource="{Binding ObjectsPCV}"
AutoGenerateColumns="False"
IsReadOnly="True">
<controls:DataForm
ItemsSource="{Binding ObjectsPCV}"
AutoGenerateFields="False"
AutoEdit="False"
AutoCommit="False"
CommandButtonsVisibility="Add, Edit, Navigation, Commit, Cancel">