【问题标题】:Optimising Pivot Control windows phone 8优化枢轴控制 windows phone 8
【发布时间】:2014-09-20 05:01:19
【问题描述】:

案例一:

我有一个带有 3 个枢轴项的枢轴控件,一旦第一次获得焦点,每个枢轴项都将填充数据(来自服务器)。

现在,当我从其他页面导航回此数据透视页面时,会产生很多延迟。如何优化它并减少延迟?即使我在导航回此页面时也无法显示 ProgressBar。

案例 2:

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

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

如何摆脱这种延迟?

帮帮我。谢谢。

【问题讨论】:

  • 可以缓存1+2情况下的数据,并在ApplicationBar上有一个刷新按钮来下载新数据。或者您可以一次只下载几个条目(也许更新您的网络服务),然后只在它们位于容器末尾时再下载一些条目。 SO和MSDN上有很多关于如何做我提到的例子。
  • 谢谢。它已经实现了,一次只下载 50 条记录,只有在滚动结束时才会下载下一个项目 50。导航时导致延迟的原因是什么?过多的物品 ?。为此,您的意思是,在导航时将所有数据保存在文件中,并在返回时从文件中恢复?这不是一个更昂贵的过程吗?

标签: windows-phone-7 windows-phone-8 windows-phone windows-phone-7.1 windows-phone-8.1


【解决方案1】:

使用LongListSelector (WP8) 或ListView (WP8.1) 作为第一页上的项目持有人。它具有 UI 虚拟化,因此无论页面上有多少项目,只会呈现屏幕上的项目。它必须解决您的case 1 延迟。如果没有 - 问题出在第 2 页的破坏中。

您的详细信息屏幕方法是完全错误的。 Pivot 是为其他目的而创建的,不建议在里面存放超过 5 件物品。

所以你需要:

  1. 创建显示一项的页面并将DataContext绑定到LayoutRoot
  2. ManipulationCompleted 事件处理程序添加到LayoutRoot 并检查是否有滑动位置
  3. 更新DataContext 到上一个或下一个项目。这将更新屏幕上显示的数据
  4. 当这可行时,创建动画以平滑当前页面向左和向右的过渡:
    • 当用户在手机上移动手指时 - 将页面左右移动到相同的偏移量
    • 当用户离开手指时 - 调用动画完成滑动
    • 动画完成后(页面超出屏幕),更新 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
    }
}

【讨论】:

  • 是的,我已经在案例 1 中使用 LLS,并且页面 2 非常轻量级。我认为这是因为第 1 页中的项目太多。对此有什么建议吗?另外,对于案例2,您所说的很好而且很棒。任何代码示例或示例来检测滑动?我没有实现滑动和动画,而是在寻找类似的东西,有一个包含三个项目的数据透视页面并更改我的数据?对我的方法有什么建议吗?
  • 您可以发布代码示例或您的第 4 点的一些最低实现吗?
  • @Pradeep_AJ,它展示了基本思想,您需要进入并添加其他代码才能使其工作
猜你喜欢
  • 1970-01-01
  • 2023-04-04
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多