Windows Phone:“手动”刷新绑定列表框

时间:2013-10-09 14:44:01

标签: c# windows-phone-7 mvvm binding

问题似乎很简单,但我没有找到对这个问题的回答。

我的项目列表工作正常,绑定到我的MVVM。当我更新一个元素时,所有元素都很好地协调,反映了变化等等。

我的一个字段是根据当天计算的。因此,如果用户按HOME并退出应用程序,并且明天他回来,则列表不会刷新,它会显示前一天的数据。

要解决这个问题,我想在使用OnNavigatedToOnNavigatedFrom事件,在开始时保存“入口”日,并将其与OnNavigatedTo事件中的当前日期进行比较(恢复应用程序时被激活)。检测到这一天的变化,我可以刷新清单。

问题是,我如何刷新列表?或者我可能会使事情变得复杂,并且有更好的方法来做到这一点。

编辑:最终解决方案。

对于那些需要相同功能的人,我找到了解决方案:

    // Declare this var in the MainPage class
    // Holds the starting app day. If when going back to this page it has changed, refresh the list
    private DateTime loadDate;

    // Save the current day. If when going back to here it has changed, refresh the list
    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e)
    {
        loadDate = DateTime.Today;
    }

    // Read the current day and compare with saved. If when going back to here it has changed, refresh the list
    protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
    {
        // Read the current day and compare
        if (loadDate != DateTime.Today)
        {
            // The day has changed. Loop the list to refresh every item
            foreach (Item item in listBoxControl.Items)
            {
                item.CalculateMyOwnFieldNotBindedToDB();
            }
        }
    }

1 个答案:

答案 0 :(得分:0)

问题是如果你在List上引发属性更改而没有实际更改List,它实际上会被忽略,因为视图将检测到List对象实际上没有更改。一种解决方法可能是将List设置为null,然后将其设置回原始List 另一种解决方案是循环遍历List中的项目并在日期字段上提升属性更改,这样就不需要仅刷新整个列表的实际属性。