我有一个可观察的集合,由collectionviewsource向用户公开。集合中项目的一个属性是sortorder。我试图允许用户永久使用此集合并将更改传播到数据库。
我让CVS工作,我可以在列表框中显示各个项目。现在,我必须更改item.sortorder == cvs.currentindex,我无法找到正确的方法来执行此操作。
修改
显然我不够清楚。 Sortorder是我的数据库中的一个字段,它是我的对象的一部分,允许用户控制列表控件中显示的项目的位置。我试图让我的用户能够通过将sortorder字段的值更改为等于显示项目的当前索引来更改这些项目在未来的排序方式。
项目当前的排序顺序值为3。
用户将显示的列表项目移动到位置0(即第一个位置)
项目new sortorder = 0项目与原始排序顺序将变为1等
这可以通过循环排序的CVS并使Item.SortOrder = CVS.Item.index
来实现。答案 0 :(得分:0)
数据库通常根据表中添加到表中的顺序从表中返回行,除非您在查询中指定order by子句。更改数据库中的顺序不是一个好主意。相反,尝试使用参数化查询并传入您希望进行排序的列和方向,这是从用户首选项中检索的。
答案 1 :(得分:0)
我明白了。
我回过头来看看我用来改变元素位置的代码,我实际上是在使用集合本身:
private void OnDecreaseSortOrderCommandExecute()
{
int index = QuestionsCVS.View.CurrentPosition;
QuestionsViewModel item = SelectedQuestionVM;
if (item != null && index > 0)
{
SortableQuestionsVMCollection.RemoveAt(index);
SortableQuestionsVMCollection.Insert(index - 1, item);
QuestionsCVS.View.Refresh();
QuestionsCVS.View.MoveCurrentTo(item);
}
}
所以我只是这样做了:
private void ResortSortableQuestionsVMCollection()
{
for (int i = 0; i < SortableQuestionsVMCollection.Count; i++)
{
SortableQuestionsVMCollection[i].SortOrder = i;
}
}
我不知道这是否适用于所有情况,但它确实做了我想要的这个。