Windows phone 7 优化枢轴控制windows phone 8

Windows phone 7 优化枢轴控制windows phone 8,windows-phone-7,windows-phone-8,windows-phone,windows-phone-7.1,windows-phone-8.1,Windows Phone 7,Windows Phone 8,Windows Phone,Windows Phone 7.1,Windows Phone 8.1,案例1: 我有一个包含3个Pivot项的Pivot控件,每个Pivot项在第一次获得焦点后都将填充数据(来自服务器) 现在,当我从另一个页面导航回这个透视页面时,会造成很多延迟。如何优化它并减少延迟?即使在导航回此页面时,我也无法显示进度条 案例2: 我有一个包含更多项目的列表视图,比如150,在选择一个项目时,我需要显示selectedItem的详细描述,并且它应该是可切换的,以便用户可以在同一描述页面中看到下一条记录 现在,我正在使用Pivot页面并将项目绑定到ItemsSource属性,它

案例1:

我有一个包含3个Pivot项的Pivot控件,每个Pivot项在第一次获得焦点后都将填充数据(来自服务器)

现在,当我从另一个页面导航回这个透视页面时,会造成很多延迟。如何优化它并减少延迟?即使在导航回此页面时,我也无法显示进度条

案例2:

我有一个包含更多项目的列表视图,比如150,在选择一个项目时,我需要显示selectedItem的详细描述,并且它应该是可切换的,以便用户可以在同一描述页面中看到下一条记录

现在,我正在使用Pivot页面并将项目绑定到ItemsSource属性,它在导航到Pivot页面和从Pivot页面导航时会产生更多的延迟(10秒)

如何摆脱这种拖延


帮帮我。谢谢。

使用
LongListSelector
(WP8)或
ListView
(WP8.1)作为第一页的项目持有者。它具有UI虚拟化,所以无论页面上有多少项,都只呈现屏幕上的项。它必须解决您的
案例1
延迟问题。如果没有-问题在第2页

您的详细信息屏幕方法是完全错误的<代码>透视图是为其他目的而创建的,不建议在其中容纳超过5个项目

因此,您需要:

  • 创建显示一个项目的页面并将
    DataContext
    绑定到
    LayoutRoot
  • ManipulationCompleted
    事件处理程序添加到
    LayoutRoot
    并检查刷卡是否到位
  • 将数据上下文更新到上一项或下一项。这将更新屏幕上显示的数据
  • 当这将起作用时,创建动画以使当前页面向左右平滑过渡:
    • 当用户在手机上移动手指时-将页面左右移动到相同的偏移量
    • 当用户离开手指时-调用动画以完成滑动
    • 动画完成后(在屏幕外翻页),更新
      DataContext
      ,并调用动画从屏幕的另一侧带来新项目
  • 这将复制
    Pivot
    行为,但不会对无法查看的项目消耗内存

    UPD:

    步骤4实施:

    private void LayoutRoot_ManipulationDelta(object sender, System.Windows.Input.ManipulationDeltaEventArgs e)
    {
        (LayoutRoot.RenderTransform as CompositeTransform).TranslateX += e.DeltaManipulation.Translation.X;
    }
    
    private void LayoutRoot_ManipulationCompleted(object sender, System.Windows.Input.ManipulationCompletedEventArgs e)
    {
        if (e.TotalManipulation.Translation.X + e.FinalVelocities.LinearVelocity.X < -100)
        {
            if (current < Count - 1)
            {
                //slide to next item
                current++;
            }
            else
            {
                //no next item - slide back
            }
        }
        else if (e.TotalManipulation.Translation.X + e.FinalVelocities.LinearVelocity.X > 100)
        {
            if (current > 0)
            {
                // slide to prev item
    
                current--;
            }
            else
            {
                // no prev item - slide back
            }
        }
        else
        {
            // no swipe - slide back
        }
    }
    
    private void LayoutRoot\u操纵delta(对象发送方,System.Windows.Input.操纵deltaeventargs e)
    {
    (LayoutRoot.RenderTransform为CompositeTransform).TranslateX+=e.DeltaManipulation.Translation.X;
    }
    私有无效布局根操作已完成(对象发送方,System.Windows.Input.OperationCompletedEventArgs e)
    {
    if(例如,TotalManipulation.Translation.X+e.FinalLocaties.LinearLocaties.X<-100)
    {
    如果(电流<计数-1)
    {
    //滑到下一项
    电流++;
    }
    其他的
    {
    //无下一项-向后滑动
    }
    }
    否则,如果(例如TotalManipulation.Translation.X+e.FinalLocaties.LinearLocaties.X>100)
    {
    如果(当前>0)
    {
    //滑到上一项
    当前--;
    }
    其他的
    {
    //无上一项-向后滑动
    }
    }
    其他的
    {
    //无刷-滑回
    }
    }
    
    您可以缓存案例1+2中的数据,并在应用程序栏上有一个刷新按钮来下载新数据。或者您可以一次下载几个条目(可能更新您的Web服务),然后在容器末尾再下载一些条目。关于如何做我提到的事情,SO和MSDN上有很多例子。谢谢。它已经像这样实现了,一次只下载50条记录,只有在滚动结束时,才会下载下一个项目50。导航时导致延迟的原因是什么?物品太多?。为此,您的意思是,在导航时将所有数据保存在一个文件中,在返回时从该文件还原?这不是一个成本更高的过程吗?是的,我已经在案例1中使用LLS,第2页非常轻量级。我想这是因为第一页的内容太多了。有什么建议吗?另外,对于案例2,您所说的很好,非常好。是否有检测刷击的代码示例或示例?我不是在实现滑动和动画,而是在寻找类似的东西,有一个包含三个项目的透视页面,然后更改我的数据?对我的方法有什么建议吗?你能发布一个代码示例或你的第4点的一些最低实现吗?@Pradeep_AJ,它显示了基本思想,你需要进入并添加其他代码才能使其工作