0

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

我的项目列表运行良好,绑定到我的 MVVM。当我更新一个元素时,一切都很好地协调,变化被反映等等。

我的一个字段是根据当天计算的。所以,如果用户按下 HOME 并退出 App,明天他回来,列表没有刷新,它显示的是前一天的数据。

为了解决这个问题,我想在使用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();
            }
        }
    }
4

1 回答 1

0

问题是,如果您在未实际更改 List 的情况下对 List 进行属性更改,它将实际上被忽略,因为视图将检测到 List 对象实际上没有更改。一种解决方法可能是将列表设置为空,然后将其设置回原始列表。
另一种解决方案是只循环列表中的项目并在您的日期字段上引发属性更改,就像这样它不需要刷新整个列表只是实际属性。

于 2013-10-09T16:20:44.333 回答