切换具有正在编辑的视图时,NotifyPropertyChanged中抛出NullReferenceException

时间:2010-10-06 15:48:19

标签: silverlight prism inotifypropertychanged

我有一系列视图要根据父视图中树中当前选定的项目显示。在父视图的初始化方法期间,这些视图是在区域中创建和注册的,并且正在被正确地停用/激活,因此提供了交换正确视图的效果。这些视图有一个底层视图模型作为其datacontext,其中包含支持INotifyPropertyChanged的数据对象。

如果在子视图中当前没有正在进行的编辑但是如果视图中正在进行编辑(即用户已更改描述的内容但未单击文本,则此解决方案有效)框)并且该视图被停用(即在父视图中单击一个不同的树项,从而导致发生去激活)在附加到现在已停用的基础数据对象的NotifyPropertyChanged()中抛出NullReferenceException图。

似乎正在发生的事情是:

  • 用户在子视图中启动编辑
  • 用户单击父视图中树中的项目
  • 控制器选择树中所选项目的更改
    • 当前子视图已停用
    • 新视图已激活
  • 从编辑的更改发生在基础数据对象(调用set方法)
  • 由于此更改,数据对象会生成更改通知事件
  • 抛出空引用异常。

据推测,此更改通知事件正在发送到现在取消激活的视图,但视图不为空。

1 个答案:

答案 0 :(得分:1)

我自己没试过,但我相信一个解决方案是使用IActiveAware监听视图的停用事件并取消任何编辑。

查看this link是否有帮助。