WP7 - 当按下窗口后退按钮时,为什么我的绑定没有触发?

时间:2011-01-22 16:16:10

标签: data-binding windows-phone-7 mvvm-light back-button

希望有一个明显的答案,我凌晨2点的大脑没有看到(我的基础是我找不到其他同样问题的人)。

当我按下我的Windows Phone 7上的“硬件/内置”后退按钮时,我的所有绑定都没有重新评估。例如,在我的MainPage上,我有一个按钮的“IsEnabled”绑定到我的ViewModel中的bool属性,该属性检查值是否在隔离存储中。在模拟器中,它启动为禁用(显然)。然后我导航到另一个页面并将所需的值添加到隔离存储。当我按下硬件返回按钮返回到原始页面时,绑定不会被重新评估,我的按钮仍保持禁用状态。

但是,如果我使用导航方法通过代码返回MainPage,则会重新评估绑定并且一切都很好。

为什么有任何想法?

2 个答案:

答案 0 :(得分:0)

问题听起来像你的MVVM Light ViewModel没有引发RaisePropertyChanged方法 - 如果你将viewmodel上的IsEnabled属性的Get {}访问器直接绑定到IsolatedStorage中的值,那么ViewModel不是要知道潜在价值必然会发生变化。

当您将值写入IsolatedStorage时,您可以使用MVVM中的Messenger接口来通知ViewModel,它应该为您的模型触发RaisePropertyChanged()事件,并且会在您的模型中重新绑定该属性图。

答案 1 :(得分:0)

当您使用NavigationService.Navigate方法时,您实际上正在执行转发导航,并且会创建新页面实例。按下硬件后退按钮时,将执行向后导航,并重新显示上一页。几乎所有的时间,你得到的是页面原始实例的缓存版本。

您可以重新评估页面的OnNavigatedTo覆盖中的任何绑定,但这会引入一些“代码味道”。如上所述,使用Messenger可以更新关联的视图模型,这将更新页面上的绑定。