奇怪的RaisePropertyChanged行为

时间:2011-01-04 19:42:10

标签: mvvm windows-phone-7

我对WP7的MVVM有疑问。在我的应用程序中,我有一种日期选择器或日历,如果你愿意的话。因此,在挑选一天之后,可以选择通过点击它并转到另一页来编辑关于这一天的信息。

问题在于,当我更改某些信息并单击后退按钮时,更改的信息未在correspongind绑定中更新。这就是为什么在navigatedto事件中我从我的VM调用该页面的公共方法。此方法(RefreshSelectedDay)的唯一目的是调用RaisePropertyChanged,以便页面上的绑定文本字段获取新信息。然而,没有任何反应。信息是SelectedDay属性的actaully属性whish是MyDay类的实例。

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        ViewModel.ViewModelLocator.CalendarStatic.RefreshSelectedDay();  
    }

    /// <summary>
    /// I admit that this is by far the most stupid solution so far.
    /// RaisePropertyChanged won't work if you haven't really changed the property.
    /// That's why we set it to null and then turn it back.
    /// Used for updating the day when returning from
    /// the edit screen.
    /// </summary>
    public void RefreshSelectedDay()
    {            
        MyDay w = selectedDay;
        SelectedDay = null;
        SelectedDay = w;
    }

我所能看到的解决方案远非优雅。 IMO会发生什么,如果我只是调用RaisePropertyChanged它将不会传播,因为它是同一个变量,只是其中一个属性发生了变化。如果有人能够解释发生的事情,那将是很可爱的。

1 个答案:

答案 0 :(得分:0)

“问题在于,当我更改某些信息并单击后退按钮时,更改的信息未在correspongind绑定中更新。”

这对我来说意味着据说的信息被改变了,实际上并未改变。这也可以解释为什么你的RefreshSelectedDay似乎也不起作用。

您是在修改SelectedDay上的属性,还是创建新实例,而且没有设置?

如果您要修改SelectedDay上的属性,该类是否会正确触发属性更改通知?

更多代码也可以帮助我们调试。

相关问题