Windows Phone ContainerContentChanging Phase always 0

本文关键字:always Phase ContainerContentChanging Phone Windows | 更新日期: 2024-11-03 19:23:33

在WinRT WP8.1应用程序上使用ListView:

我正在尝试在列表视图上使用容器内容更改事件,如下所示 -

private void ListOnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
    {
        var viewer = args.ItemContainer.ContentTemplateRoot as View;
        if (viewer == null)
        {
            return;
        }
        if (args.InRecycleQueue)
        {
            viewer.ClearData();
        }
        else if (args.Phase == 0)
        {
            viewer.ShowPlaceholder(args.Item as ViewModel);
            args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
        }
        else if (args.Phase == 1)
        {
            // Load
            args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
        }
        else if (args.Phase == 2)
        {
            // Load more
            args.RegisterUpdateCallback(this.ContainerContentChangingDelegate);
        }
        else if (args.Phase == 3)
        {
            // Show images
        }
        args.Handled = true;
    }

我遇到的问题是,在滚动查看更多项目时,容器内容更改事件参数上的阶段属性始终为 0。

(对于初始视图中加载的项目,一切都可以正常工作 - 只有当我开始滚动时,才没有项目更新超过其占位符。

任何想法为什么 hase 属性不会更新?

Windows Phone ContainerContentChanging Phase always 0

注册更新回调时需要指定阶段号。

您的代码应如下所示:

private void ListOnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
    var viewer = args.ItemContainer.ContentTemplateRoot as View;
    if (viewer == null)
    {
        return;
    }
    if (args.InRecycleQueue)
    {
        viewer.ClearData();
    }
    else if (args.Phase == 0)
    {
        viewer.ShowPlaceholder(args.Item as ViewModel);
        args.RegisterUpdateCallback(1, this.ContainerContentChangingDelegate);
    }
    else if (args.Phase == 1)
    {
        // Load
        args.RegisterUpdateCallback(2, this.ContainerContentChangingDelegate);
    }
    else if (args.Phase == 2)
    {
        // Load more
        args.RegisterUpdateCallback(3, this.ContainerContentChangingDelegate);
    }
    else if (args.Phase == 3)
    {
        // Show images
    }
    args.Handled = true;
}