繁体   English   中英

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

[英]Windows Phone: refresh a binded listbox “manually”

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

我有工作正常的项目列表,已绑定到我的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();
            }
        }
    }

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM