Windows Phone ContainerContentChanging阶段始终为0

时间:2015-03-08 16:01:51

标签: c# windows windows-runtime windows-phone-8.1 winrt-xaml

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

我正在尝试在ListView上使用ContainerContentChanging事件 -

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;
    }

我遇到的问题是在滚动查看更多项目时,ContainerContentChangingEventArgs上的Phase属性始终为0。

(所有这些都适用于初始视图中加载的项目 - 仅当我开始滚动时,没有任何项目通过其占位符更新。

为什么hase属性不会更新?

1 个答案:

答案 0 :(得分: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;
}