C# Windows Phone容器内容更改阶段始终为0

C# Windows Phone容器内容更改阶段始终为0,c#,windows,windows-runtime,windows-phone-8.1,winrt-xaml,C#,Windows,Windows Runtime,Windows Phone 8.1,Winrt Xaml,在WinRT WP8.1应用程序上使用列表视图: 我正试图在ListView上使用ContainerContentChanged事件- private void ListOnContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args) { var viewer = args.ItemContainer.ContentTemplateRoot as View;

在WinRT WP8.1应用程序上使用列表视图:

我正试图在ListView上使用ContainerContentChanged事件-

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属性不会更新吗?

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

您的代码应该如下所示:

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