Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF ListView.SelectedItems如果您;换档选择";自下而上_C#_Wpf_Listview_Selecteditem - Fatal编程技术网

C# WPF ListView.SelectedItems如果您;换档选择";自下而上

C# WPF ListView.SelectedItems如果您;换档选择";自下而上,c#,wpf,listview,selecteditem,C#,Wpf,Listview,Selecteditem,我为用户实现了一些逻辑,以便能够将所选值从ListView复制到剪贴板。在玩它的时候,我注意到ListView.SelectedItems会根据您选择项目的方式以不同的顺序返回项目 为了简单起见,我们假设我的列表有5个项目,每个项目都包含一个字符串,并以升序排列一个数字,例如第一个项目=“1”,第二个项目=“2”,等等 场景1:单击项目2,按住shift键,单击项目4->SelectedItems具有元素“2,3,4”的预期顺序 场景2:单击项目4,按住shift键,单击项目2->Selecte

我为用户实现了一些逻辑,以便能够将所选值从ListView复制到剪贴板。在玩它的时候,我注意到ListView.SelectedItems会根据您选择项目的方式以不同的顺序返回项目

为了简单起见,我们假设我的列表有5个项目,每个项目都包含一个字符串,并以升序排列一个数字,例如第一个项目=“1”,第二个项目=“2”,等等

场景1:单击项目2,按住shift键,单击项目4->SelectedItems具有元素“2,3,4”的预期顺序

场景2:单击项目4,按住shift键,单击项目2->SelectedItems具有意外的元素顺序“4,2,3”

我是不是错过了一些很简单的东西?如果我使用shift键“从下到上”选择一个范围,则单击的第一个项目将移动到SelectedItems的第一个位置,然后按照正确的顺序跟随所有其他项目

ListView是否注意到先前选择的项目也在范围内?所以说记住它,把它放在SelectedItems的第一个位置,然后“添加”所有剩余的项目?如果您只将选择从上到下移动,我不会感到麻烦,但反过来会打乱顺序…:/


任何帮助/想法都将不胜感激

为什么订单很重要?不管怎样,您可能仍然在UI级别执行的排序、排序和任何筛选都应该通过集合视图完成。这将覆盖所有的选择顺序。另外,我希望你使用主键或类似的东西来计算实际值?如果只使用索引,则会遇到索引竞争条件(以前是索引2,现在不再是;列表中可能没有的,现在可能是索引2)。您无法依赖SelectedItems中的项目顺序,除非SelectedItem是SelectedItems中的第一个元素。你所观察到的似乎是显而易见的。单击一次即可设置SelectedItem,选择“更多”会以未定义的顺序将它们添加到集合中,同时将SelectedItem保留在索引0中。@Christopher:顺序对我很重要,因为它是记录的数据。因此,基本上,我必须将得到的结果与我当前的收藏状态进行比较,然后重新订购(考虑到收藏可能发生的变化)?(at)克莱门斯:是的。。。你说得对。使用主键或其他可靠的数据来识别元素。一开始依赖索引是个坏主意。如果你依赖于PK(或者像PK一样明确的东西),那么顺序是不相关的。对过滤器的更改是不相关的。元素在那里并且将被选择,或者不在那里并且什么也不发生。