在UWP应用中,我正在尝试对绑定到ObservableCollection
的ListView
进行排序-因此,collection.OrderBy(..)
(创建新集合)不是一种选择。
到目前为止,我一直使用此扩展方法:
public static void Sort<TSource, TKey>(this
ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
{
List<TSource> sortedList = source.OrderBy(keySelector).ToList();
source.Clear();
foreach (var sortedItem in sortedList)
{
source.Add(sortedItem);
}
}
不幸的是,由于source.Clear()
,这种方式会重置当前的“滚动偏移量”,并且相应的ListView
会一直滚动回到顶部,这是非常糟糕的用户体验。
有任何想法吗?
参考方案
您可以尝试创建一个临时集合,其中包含原始集合中的所有项目,对其进行排序,然后循环浏览其项目,然后仅对需要更新位置的项目进行重新排序。像这样-
public static void Sort<TSource, TKey>(this ObservableCollection<TSource> source, Func<TSource, TKey> keySelector)
{
var sortedSource = source.OrderBy(keySelector).ToList();
for (var i = 0; i < sortedSource.Count; i++)
{
var itemToSort = sortedSource[i];
// If the item is already at the right position, leave it and continue.
if (source.IndexOf(itemToSort) == i)
{
continue;
}
source.Remove(itemToSort);
source.Insert(i, itemToSort);
}
}
另外,您将希望ListView
在制作动画时保持滚动偏移。可以通过设置-
<ItemsPanelTemplate>
<ItemsStackPanel ItemsUpdatingScrollMode="KeepScrollOffset" />
</ItemsPanelTemplate>
我发现这个与UX相关的问题确实很有趣,甚至为它创建了一个demo project。 :)下面的gif演示了最终结果。对我来说,从视觉上来说,它提供了更好的体验,即排序对哪些项进行了重新定位或不进行了重新排序。
Tensorflow到ONNX的转换 - python我目前正在尝试将通过本教程(https://github.com/thtrieu/darkflow)创建的已保存(正在工作)的.pb文件转换为onnx文件。我目前正在使用winML工具,但是转换的结果根本不起作用(输入参数错误+整个体系结构不正确)。我的输入参数(在自述文件的最底部指定):input:0输出节点:输出:0我想在HoloLens上运行的UWP应…
Windows上的Android或UWP建议 - java我在Play商店中有一个Android应用,我经常在工作中使用它。它基于LDAP。我可以将应用程序移植到Windows Java应用程序,C#Windows Form应用程序或通用应用程序,因为我拥有完整的源代码并具有所有这些方面的经验,但是我宁愿不更改界面(这是将其移植到的最困难的部分)任何东西)。除了界面之外,没有任何真正依赖于Android本身的东西。…
Java中的“ <<”运算符 - java最喜欢的语句来自Java的Character类:(1 << Character.PARAGRAPH_SEPARATOR)) >> type PARAGRAPH_SEPARATOR是字节,type是整数。这句话中的操作员,他们做什么?如何以及在哪里可以使用这些运算符?这是oracles java.lang.Character文档。该类中…
Win2D获取语义标签值 - c#我正在使用Win2D.UWP来获取系统字体集。我需要过滤查询的字体并将它们分组为“ Serif”,“ Sans-Serif”,“ Decorative”等类别(例如Adobe应用程序或Corel Font Manager)。据我研究,信息可以通过带有参数Microsoft.Graphics.Canvas.Text.CanvasFontSet.GetPrope…
当我运行python代码时,它说“ <<目前是意外情况” - python基本上,这是我们合作者的python代码,用于生成网格,该网格是在Linux环境下开发的。我使用Cygwin在Windows上运行此代码。麻烦部分如下。 BiV_temp.geo也是一个python脚本。因此,命令是用预定义的数字和文件名替换脚本BiV_temp.geo中的字符串。os.system('cp BiV_fiber.geo BiV_te…