【问题标题】:[WP8.1]Windows Phone [8.1] - PivotItem Layout Update only on Selecting PivotItem[WP8.1]Windows Phone [8.1] - 仅在选择 PivotItem 时更新 PivotItem 布局
【发布时间】:2017-01-07 16:33:48
【问题描述】:

与 UI 相关的问题(坐在后端深处真是太好了)。

一些介绍:

在我的项目中,我的 MainPage 带有包含 3 个 PivotItems 的 Pivot Control。还有一个额外的页面,我们称之为 AddPage。

有两个相互关联的DataSource。

PivotItem 编号 2 能够从 DataSource_01 中删除项目。发生这种情况时,DataSource_02 重新计算其内容并返回 PivotItem 编号 1 的新更新集合。但这不会向 DataSource_02 添加新项目,它只是更改一些属性(当前 DataSource_01 有 18 个类别中的 160 个项目,Data source_02 保留此基于DataSource_01的18个类别和对应的类别总和。

PivotItem 编号 1 包含 GridView,其中项目源绑定到 DataSource_02。点击一个项目会触发 AddPage,它可以将项目添加到 DataSource_01。

这是简化的逻辑,并且有效。

问题在于 LayoutUpdate。从 PivotItem_02 上的 DataSource_01 中删除项目后,当我滑动到 PivotItem_01 时,我可以看到每个 GridViewItem 一次弹出一个。我还没有说服自己接受这种行为,所以我在这里。

我宁愿在 PivotItem_02 上预加载 PivotItem_01 的视图。也许在更新 PivotItem_02 之前?有没有办法控制这种行为?

我尝试在数据库更新后运行我的 Pivot 的 UpdateLayout(),但它不起作用。

还有一个转折。

我正在为 Windows 8.1 系统编写我的应用程序,同时在装有 Windows 10 的 Microsoft Lumia 640LTE 设备上对其进行测试。我还有另一台测试设备,即装有 Windows 8.1 的诺基亚 Lumia 530 DS,这台工作正常,布局得到更新在 PivotItem_01 上滑动到它之前。

我已将 _SizeChanged 事件和处理程序添加到 PivotItem_01 控件之一。处理程序在更新 PivotItem_02 时在 Windows 8.1 设备上滑动到它时在 Windows_10 设备上运行。这很令人困惑,但可以解决。我也尝试过在 DataSource_01 中使用仅包含类别和一条记录的新数据源,但它没有改变任何东西。

虽然我认为这不是代码相关问题,但我没有附加任何代码。

亲切的问候,

亚当

【问题讨论】:

    标签: c# windows-phone-8.1 pivot


    【解决方案1】:

    理解问题

    好的,我想我已经能够理解这个问题了。对于您的问题,您的意思是:GridView 中的项目在 Pivot.SelectedItem 更改时更改,您希望它在绑定数据更改后立即更改。此外,您不希望一次删除一个项目,您希望它们不进行任何转换。如果这就是您的意思,请查看以下解决方案。

    Pivot 实际发生了什么

    带有Pivot 控件的东西是它内置了DefferedLoadingStrategy。因此,每次您更改选定选项卡时,未选定选项卡的LoadingStrategy 都会转到Lazy,因此在再次选择选项卡之前不会发生对这些特定数据项的所有更改。基本上,视图在被选中之前不会调用更新的数据。

    GridViewItems 发生了什么

    在 UWP 中,GridView 具有默认的 Transitions。因此,当数据更改时,内容会使用控件定义的转换进行更新。

    解决方案:

    对于每次删除一个 GridViewItems,您可以输入类似这样的内容以避免任何转换。

    <GridView.ItemContainerTransitions>
         <TransitionCollection/>
    </GridView.ItemContainerTransitions>
    

    This Link 将为您提供有关实现该代码的更多见解,如果您有一个组样式。

    对于Pivot 问题,我建议您不要使用LayoutUpdated() 事件,因为它会在您每次调整视图大小或任何改变甚至最轻微的UI 更改时调用。相反,我建议在Pivot 控件上使用SelectionChanged 事件并命名您的PivotItems,以便您可以检查Pivot.SelectedItem 属性以在SelectionChanged 事件上应用不同的代码逻辑。您可以将SelectionChangedevent 与如下逻辑一起使用:

    if (pivot.SelectedItem == DetailsPivotItem)
    {
       //Some Logic here. where DetailsPivotItem is the name of your PivotItem 
    }
    else
    {
       // Some other logic here if you just have 2 PivotItems, if more then add elseIf statements
    }
    

    如果不放心发表评论,我希望这能解决您的问题。谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多