对PagedCollectionView进行过滤会导致与DataForm结合使用时出现问题

时间:2011-06-29 13:33:17

标签: c# silverlight data-binding silverlight-4.0

我正在开发一个Silverlight应用程序,其中包含一个如下所示的页面:

    --------------------------------
    |          |                   |
    | DataGrid:| DataForm:         |
    |  list of |  selected         |
    |  objects |  object's details |
    |          |                   |
    --------------------------------

用户从DataGrid中选择一个对象,并显示该对象的详细信息,并可在右侧的DataForm中进行编辑。

DataGrid和DataForm都绑定到同一个PagedCollectionView

如果我没有对此PagedCollectionView应用过滤器,一切都很好。但是,当我应用过滤器然后尝试编辑并保存对象的详细信息时,会在RaisePropertyChanged函数中的某处发生NullReferenceException,该函数将触发正在编辑的对象的PropertyChanged事件。此异常源自DataForm.OnCurrentItemPropertyChanged,是由DataForm的CurrentItem突然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">

0 个答案:

没有答案
相关问题