在逻辑删除后恢复 LongListSelector 中的滚动位置

2023-11-27

我正在尝试使用 WP7 Silverlight 工具包中的 LongListSelector 控件。这需要一些工作,但我终于让它与我的应用程序一起工作。不幸的是,我在正确处理逻辑删除过程时遇到了一些麻烦。

当应用程序逻辑删除(或用户通过选择列表中的项目导航到另一个页面)时,我会保存列表中最顶层可见项目的副本。我将其保存到类变量和应用程序状态集合中。

ICollection<object> visibleItems = myLongList.GetItemsInView();
_lastItem = null;
if (visibleItems.Count > 0)
    _lastItem = visibleItems.First();
IDictionary<string, object> state = 
              Microsoft.Phone.Shell.PhoneApplicationService.Current.State;
state["IndexByName_LastTopItem"] = _lastItem;

然后,当用户返回页面时,我检查两个值(状态或变量)之一,并使用它来恢复最后的滚动位置。

if (_lastItem == null) 
{ 
    if (state.ContainsKey("IndexByName_LastTopItem")) 
    { 
        _lastItem = state["IndexByName_LastTopItem"] as Chemical; 
    } 
} 

if (_lastItem != null) 
    Dispatcher.BeginInvoke(() => { myLongList.ScrollTo(_lastItem); }); 

除非应用程序存在墓碑,否则这非常有效。在这种情况下,我不会收到任何错误,但列表是完全空白的,直到我触摸它并拖动为止。一旦我这样做,它就会重新显示在列表顶部。我查看了控件的源代码,发现当您调用 .ScrollTo(object) 时,它没有匹配。进一步的调查发现,当搜索要滚动到的项目时,它使用 == 而不是 Equals 进行比较。我只覆盖了 Equals,显然默认的 == 比较(按设计)引用。当您在逻辑删除后恢复状态项时,引用不匹配。 我可以覆盖 ==,但这感觉不对。我可以更改并重建控制源来调用 equals (我尝试过并且它有效),但它是由比我聪明得多的人编写的,我想知道我是否只是不明白它。 有没有更好的办法?


这是我最终想出的解决方案......

由于工具包可以免费获得源代码,因此我最终编辑了 LongListSelector 源代码以调用 .Equals 而不是 ==。它似乎适合我的用例,我想我会分享以防其他人发现它有用......

在 LongListSelector.cs 中找到 GetFlattenedIndex(object item) 函数并替换

if (item == _flattenedItems[index].Item)

with

if (item.Equals(_flattenedItems[index].Item))

然后在同一个文件中找到 GetResolvedIndex(object item, out ContentPresenter contentPresenter) 函数并替换

if (node.Value.Content == item)  // Nov 2010 Release
// OR
if (_flattenedItems[index].Item == item)  // Feb 2011 Release

with

if (item.Equals(node.Value.Content))  // Nov 2010 Release
// OR
if (item.Equals(_flattenedItems[index].Item))  // Feb 2011 Release

请注意,替换取决于您使用的工具包下载!

一旦您对控件进行了这些更改,它就会正确匹配 ScrollTo(object) 中指定的对象,即使引用不相等,只要您为 LongListSelector 中显示的所有对象类型正确重写 Equals 即可。不要忘记这适用于您的分组类以及您的项目类(如果您有分组列表)!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在逻辑删除后恢复 LongListSelector 中的滚动位置 的相关文章

  • 如何在 WP7 中分解 URI?

    是否有一种方法可以访问 WebBrowser 控件中的查询参数 或者我们是否必须手动分解字符串 例如 http www mysite com paramter 12345 我只需要访问参数的值 我知道在使用 xaml 页面时我们有 Quer
  • 在WP7中预初始化BackgroundAudioPlayer?

    当我在 Windows Phone 7 应用程序中使用 BackgroundAudioPlayer 时 第一次要播放歌曲时需要花费大量时间来加载 有没有什么方法可以在播放第一首曲目之前预初始化BackgroundAudioPlayer 以便
  • 如何强制在 DateTimeAxis 上显示特定日期

    是否可以强制在图表上显示网格线以及极端数据点的日期 我已经尝试了以下 Chart DateTimeAxis 属性的几乎所有配置 IntervalType Interval Minimum and Maximum但我对结果并不满意 设置属性M
  • 如何使用 .Net(在 Windows Phone 上)阅读公共 Twitter 源

    我正在尝试读取用户的公共 Twitter 状态 以便可以在我的 Windows Phone 应用程序中显示它 我用 Scott Gu 的例子 http weblogs asp net scottgu archive 2010 03 18 b
  • WP7 中的可滚动文本框(Skype 和 Facebook)

    基本上 我正在开发一个记笔记应用程序 用户可以随意输入 有点像WP7 中的可滚动文本框 https stackoverflow com questions 5576691 scrollable textbox in wp7 我将 TextB
  • 如何使用 PhoneGap/Cordova 创建适用于 Windows Phone 7 的简单全景应用程序?

    我环顾四周 发现了几个适用于 Windows Phone 7 的基于 PhoneGap Cordova 的 HTML5 应用程序的示例 但它们似乎都没有向您展示如何制作全景或枢轴样式应用程序 而这些是该应用程序的一些主要吸引力 操作系统的用
  • 取消 RestSharp 请求

    我正在制作一个 wp7 应用程序 它使用 RestSharp 下载一些数据 我注意到应用程序指南要求我提供一个允许用户取消数据传输的 ui 元素 是否可以在休息时取消 ExecuteAsync 请求 ExecuteAsync 返回一个Res
  • WP7 难以将数据绑定到列表框项目源 - 不会刷新

    因此 我的 WP7 应用程序上有一个详细信息页面 其中显示了一个列表框 其中显示了我的应用程序中的一些数据 在代码隐藏中 我将列表框 itemssource 设置为对象集合 到目前为止非常简单 我在同一屏幕上还有几个文本框和一个按钮 可以让
  • 如何在 Windows Phone 7 的列表框中应用备用行样式

    您好 我是 Windows Phone 7 的新手 我在将样式应用于 Windows Phone 7 列表框中的交替行颜色时遇到问题 请帮助我 虽然 WPF 有一个ALternationCount支持这一点的属性 Silverlight 无
  • 如何为 Windows Phone 7 应用程序的 UI 编写自动化测试?

    驱动一个普通的应用程序 它的 UI 已经足够困难了 但是当应用程序没有在您的开发平台上运行时 这就更难了 那么哪些工具可以帮助我测试 Windows Phone 7 应用程序的 UI 也可以看看 对于 Windows 7 Phone 代码的
  • 需要在Windows Phone 7屏幕上显示大量文字

    我想要在屏幕上显示大约 800 KB 的文本 有人可以让我知道这个问题的可能解决方案吗 由于文本块的 2048X2048 限制 我已经尝试将文本拆分为多个文本块 并且也尝试过http blogs msdn com b priozersk a
  • 不使用 PIN 的 Twitter 身份验证

    我正在尝试验证 Windows Phone 中的用户帐户 我找到了这个 C 库来完成这项工作 tweetsharp 他们的示例非常清楚 但他们使用 pin 码来验证用户身份 using TweetSharp Pass your creden
  • 部分类继承

    我正在为 Windows Phone 制作一个单位转换器 但我在类继承方面遇到了一些问题 我有课Measurement这应该是我的程序中图形内容的顶级 public class Measurement PhoneApplicationPag
  • 获取当前Windows Phone 7设备的ID

    有没有一种方法可以唯一地识别我的应用程序正在运行的 Windows Phone 设备 有 Windows Phone 设备 ID 之类的吗 Try DeviceExtendedProperties GetValue DeviceUnique
  • 如何在 Windows Phone 7 中创建自定义文本框?

    是否可以通过创建自定义文本框来处理 sip 我想创建一个自定义文本框 gt 创建获得焦点事件 gt 在我的自定义文本框的焦点上而不是 SIP 上 我的自定义键盘应该打开 要求 如何创建自定义文本框 打开自定义键盘而不是 SIP 获取文本字段
  • 如何在 C# 中的 HttpClient 中使用凭据?

    我在使用 HttpClient 类访问 Delicious API 时遇到一些问题 我有以下代码 try const string uriSources https api del icio us v1 tags bundles all p
  • 原生编程对于移动开发有何优势?

    我需要为一家公司在一些主要的移动操作系统上开发应用程序 特别是 iOS Android 和 WP7 我最初计划为三种不同的操作系统编写三个独立的应用程序 每个应用程序都使用本机 SDK 然而 这样做有什么好处吗 有许多可用的跨平台工具 Se
  • 需要哈希表和数组列表

    我正在尝试在我的 Windows 7 Phone 应用程序中使用其他人的 C 类 这些类使用 Hashtable 类型的对象 有问题的文件有 using System Collections 在顶部 所以我假设这就是它想要的 Hashtab
  • 如何在Windows Phone 7中获取Wi-Fi和移动网络参数?

    我的应用程序需要以下移动网络参数 MCC 移动国家代码 MNC 移动网络代码 LAC 位置区域代码 CID 小区标识符 细胞信号强度 对于 Wi Fi MAC地址 信号强度 我还需要两个变体的设备 IP 地址 Windows Phone 7
  • 只允许输入字母

    如何过滤虚拟键盘中的非字母键 以下方法仅适用于拉丁字母 不幸的是 public static bool IsLetter int val return InRange val 65 90 InRange val 97 122 InRange

随机推荐

  • 不存在具有键“xxx”的“IEnumerable”类型的 ViewData 项

    Stack Overflow 上有几篇关于此问题的帖子 但没有一个答案似乎可以解决我当前情况下的问题 我有一个页面 其中有一个表格 每行都有多个文本字段和一个下拉列表 所有下拉列表都需要使用相同的 SelectList 数据 因此我将其设置
  • 在共享主机上为 32 位 Linux 编译 git

    我需要在廉价的共享主机上设置 Git 客户端 并使用一个不知名的 32 位 Linux 发行版 GCC 不可用 所以我无法在服务器上编译它 我确实有两台其他 64 位 Linux 服务器和一台 OSX 笔记本电脑可供使用 我可以尝试在其上交
  • Gnuplot,如何*跳过*丢失的数据文件?

    根据各种因素 我可能没有 1 个或多个不存在的数据文件 在预定义的 gnuplot 绘图指令中引用 当这种情况我得到 警告 跳过不可读的文件 这会取消其余指令 有什么方法可以让 gnuplot 跳过任何丢失的数据文件并绘制所有现有的数据文件
  • 为什么我收到“错误:无法推送某些参考”?

    我有一个远程 git 存储库和一个我使用的本地存储库 每当我在本地进行任何更改时 我都会将它们推送到远程 然后我有时会在远程文件上执行 git commit 以存储远程文件上的更改 我根本不直接编辑远程存储库 我只是提交更改 我是一名单一开
  • Android堆碎片策略?

    我有一个 OpenGL Android 应用程序 它使用大量内存来设置复杂的场景 这显然会导致严重的堆碎片 即使不存在内存泄漏 也不可能在不因碎片而耗尽内存的情况下销毁和创建应用程序 碎片肯定是问题 而不是泄漏 这会导致一个主要问题 因为
  • python 3.x ImportError:没有名为“cStringIO”的模块

    我该如何解决ImportError No module named cStringIO 在Python 3 x下 来自 Python 3 0 变更日志 StringIO 和 cStringIO 模块消失了 相反 导入 io 模块并分别使用
  • 如何在嵌套 Backbone 集合上“冒泡”事件?

    我有一个 Backbone 应用程序使用嵌套集合 至少我认为他们是这样称呼的 在我的具体情况下有tabs and subtabs 每个选项卡 模型 包含子选项卡 模型 的集合 对于那些更熟悉代码的人 我将在下面写下我的模型和集合 以及子选项
  • 在 OS X Mavericks 中从 C++ 链接 C

    转换到 OS X Mavericks 和 XCode 5 0 1 后 我无法再将已编译的 C 文件 从 gcc 输出 正常链接到 C 项目 从 g 输出 从我的 makefile 生成的有问题的命令对是 gcc pkg config cfl
  • Bootstrap 3 像 Facebook 一样的 Canvas 侧边栏菜单

    我正在使用 Bootstrap 3 的一些示例作为移动设备上的画布外侧边栏菜单 如下所示 http jsfiddle net AllenDB 9aAjJ 我将如何调整画布外菜单 使其像 Facebook 的搜索 朋友在线画布外菜单一样 始终
  • 用于任意大数的 BCD 数学库?

    我正在寻找库存 Delphi Data FmtBcd 库的替代品 因为我刚刚达到了它的限制 例如它可以表示的最大十进制数字 并且程序以以下方式终止EBcd 溢出异常 出于好奇 我正在计算算术系列成员 并且需要处理非常大的数字 数十万个位置并
  • 浏览器什么时候开始渲染部分传输的 HTML?

    我有一个长期运行的报告 并希望在生成报告时向用户显示一个等待旋转器 我已经完成了这项工作 但不确定我是否以最好或正确的方式做这件事 这是使用 ColdFusion 但我猜它可以是任何语言 在页面顶部 我有一些 Javascript jQue
  • Java继承字段[重复]

    这个问题在这里已经有答案了 我无法理解以下输出 我不知道为什么输出是 10 我认为该行A a new B 创建B类的新实例 我认为结果应该是20 class A int i 10 class B extends A int i 20 pub
  • 强制重新验证 mvc3 非侵入式远程验证

    这是一个经典的登录流程 用户可以选择 新用户 或 现有用户 如果用户是新用户 则登录框中的名称应根据服务器进行验证 以查看用户名是否唯一 如果是现有用户 则将跳过此检查 因为我们希望用户名已被使用 当然 我在视图模型上添加了一个 Remot
  • Objective-C 中的回合双打

    我有两个数字 格式如下34 123456789 如何将其更改为 34 123 我只想要小数点后 3 位数字 您可以将其打印到小数点后三位 NSString stringWithFormat 3f d 您可以将其近似舍入round d 100
  • 当元素位于视口中时jquery触发函数

    我想在 jquery localscroll 到达文档的某个点 div 时触发一个事件 假设我们从顶部 div 垂直滚动到第三个 div 当它到达那里时 就会触发该操作 jQuery 航点插件http imakewebthings gith
  • Android EPUBLIB 读取/加载内容

    我正在玩http www siegmann nl epublib在安卓上 有人可以解释一下正确的方法吗 阅读 epub HTML 内容 如何在 Android 上显示它 使用 WebView 如何将内容拆分为页面以及 如何搜索内容 Thx
  • 为什么断言只是终止为 iPhone 编译的程序?

    我正在调试一个经过大量断言 处理的 iPhone 应用程序 Xcode Objective C 和设备模拟器 在某些情况下 断言失败只会终止应用程序 而不是像我期望的那样闯入调试器 我通过实现我自己的断言来解决方法 其效果是 define
  • jshell 中 J 和 R 标志的确切含义/用途是什么?

    从帮助信息来看 J
  • Google Recaptcha v3 示例演示

    到目前为止 我一直在使用 Google Recaptcha v2 但现在我想使用最新版本 v3 更新我的 WebApp 是否有人可以为基本表单添加一个完整工作的 Google Recaptcha v3 示例 因为我找不到它的任何工作演示 我
  • 在逻辑删除后恢复 LongListSelector 中的滚动位置

    我正在尝试使用 WP7 Silverlight 工具包中的 LongListSelector 控件 这需要一些工作 但我终于让它与我的应用程序一起工作 不幸的是 我在正确处理逻辑删除过程时遇到了一些麻烦 当应用程序逻辑删除 或用户通过选择列