Фильтрация в PagedCollectionView вызывает проблемы в сочетании с DataForm - PullRequest
1 голос
/ 29 июня 2011

Я занимаюсь разработкой приложения 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">
...