Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.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# 我是否可以设置ICollectionChanged,使新项目始终添加到末尾,即使它具有排序描述_C#_Wpf_List_Sorting_Listview - Fatal编程技术网

C# 我是否可以设置ICollectionChanged,使新项目始终添加到末尾,即使它具有排序描述

C# 我是否可以设置ICollectionChanged,使新项目始终添加到末尾,即使它具有排序描述,c#,wpf,list,sorting,listview,C#,Wpf,List,Sorting,Listview,我有一个由ListCollectionView包装的ObservableCollection。 ListCollectionView显示在网格(XamDataGrid)中 当我向可观察集合添加项时,这些项将由ListViewCollection按照SortDescriptions属性定义的顺序显示 问题出在这里。我希望新项目出现在我的网格底部,即使现有项目目前已排序。下次用户排序(通过单击列标题)时,应该对新项目进行排序 我正在努力找到解决这个问题的办法。有人遇到过类似的问题吗?解决方案a:在幕

我有一个由ListCollectionView包装的ObservableCollection。 ListCollectionView显示在网格(XamDataGrid)中

当我向可观察集合添加项时,这些项将由ListViewCollection按照SortDescriptions属性定义的顺序显示

问题出在这里。我希望新项目出现在我的网格底部,即使现有项目目前已排序。下次用户排序(通过单击列标题)时,应该对新项目进行排序

我正在努力找到解决这个问题的办法。有人遇到过类似的问题吗?

解决方案a:在幕后自己管理排序 这里最简单的方法是在幕后对数据进行排序(可以使用LINQ),然后将其分配到网格,而不需要排序描述。然后,当您添加项目时,它们只会出现在集合的末尾。当你点击一个标题时,截取它并相应地对自己进行排序

解决方案B:添加另一个
SortDescription
另一种方法是向数据中添加另一个属性,并首先在该字段上创建一个主排序,然后根据实际要排序的内容进行排序。例如,您可以添加一个名为
existedbeforesture
的布尔值。如果您不能修改模型,您可以通过一个扩展来进行修改,在该扩展中,您可以将实际值存储在对象本身上键入的字典中。(这就是
dependencProperties
的工作方式,但这可以用于任何对象,因为您正在管理存储。)

现在,在网格中,单击排序标题时,首先要将所有项目上的
existedbeforest
属性设置为
true
。由于您的第一个
SortDescription
基于该字段,然后是通过单击标题生成的排序描述,因此所有新添加的项目都将根据需要显示在底部

第二种方法的诀窍是确保在单击排序头时,手动确保始终首先插入基于
existedbeforest
属性的
sortddescription
。本质上,你是在劫持隐含的
SortDescriptions
并注入你的来取代它们。不过应该不会太难

希望这有帮助

解决方案A:在幕后自己管理排序 这里最简单的方法是在幕后对数据进行排序(可以使用LINQ),然后将其分配到网格,而不需要排序描述。然后,当您添加项目时,它们只会出现在集合的末尾。当你点击一个标题时,截取它并相应地对自己进行排序

解决方案B:添加另一个
SortDescription
另一种方法是向数据中添加另一个属性,并首先在该字段上创建一个主排序,然后根据实际要排序的内容进行排序。例如,您可以添加一个名为
existedbeforesture
的布尔值。如果您不能修改模型,您可以通过一个扩展来进行修改,在该扩展中,您可以将实际值存储在对象本身上键入的字典中。(这就是
dependencProperties
的工作方式,但这可以用于任何对象,因为您正在管理存储。)

现在,在网格中,单击排序标题时,首先要将所有项目上的
existedbeforest
属性设置为
true
。由于您的第一个
SortDescription
基于该字段,然后是通过单击标题生成的排序描述,因此所有新添加的项目都将根据需要显示在底部

第二种方法的诀窍是确保在单击排序头时,手动确保始终首先插入基于
existedbeforest
属性的
sortddescription
。本质上,你是在劫持隐含的
SortDescriptions
并注入你的来取代它们。不过应该不会太难


希望这有帮助

ListViewCollection是您自己编写的类,还是您想说ListCollectionView或CollectionViewSource?无论如何,做一个自定义排序。不,您不能在任何意义上“设置ICollectionChanged”来执行任何操作。您在文档中看到任何配置选项了吗?(什么?)这可能意味着什么?你知道哪个类负责排序吗?所以你根本不想使用SortDescriptions,你想自己排序。开始吧。改为ListCollectionView。感谢您指出Ed.ListViewCollection是您自己编写的类,还是您想说ListCollectionView或CollectionViewSource?无论如何,做一个自定义排序。不,您不能在任何意义上“设置ICollectionChanged”来执行任何操作。您在文档中看到任何配置选项了吗?(什么?)这可能意味着什么?你知道哪个类负责排序吗?所以你根本不想使用SortDescriptions,你想自己排序。开始吧。改为ListCollectionView。谢谢你指出Ed。回答得很好!!谢谢我选择了第二种解决方案。我所做的唯一更改是将existedbefore设置为int,以便保持自上次排序以来添加的项目的顺序。我只是在添加新项目时增加这个int。所有其他项目都已设置为0。很高兴我能提供帮助!很好地抓住了这个整数变化!回答得很好!!谢谢我选择了第二种解决方案。我所做的唯一更改是将existedbefore设置为int,以便保持自上次排序以来添加的项目的顺序。我只是在添加新项目时增加这个int。所有其他项目都已设置为0。很高兴我能提供帮助!很好地抓住了这个整数变化!