gpt4 book ai didi

windows-phone-7 - 在墓碑后恢复 LongListSelector 中的滚动位置

转载 作者:行者123 更新时间:2023-12-04 21:24:16 25 4
gpt4 key购买 nike

我正在尝试使用 WP7 Silverlight Toolkit 中的 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(我尝试过并且有效),但它是由比我聪明得多的人编写的,我想知道我是否只是不明白。
有没有更好的办法?

最佳答案

这是我最终想出的修复...

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

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

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



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



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

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

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

关于windows-phone-7 - 在墓碑后恢复 LongListSelector 中的滚动位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6327286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com