C# 列表框未在WPF应用程序中排序

C# 列表框未在WPF应用程序中排序,c#,sorting,listbox,C#,Sorting,Listbox,在添加/删除列表时,我试图通过存储到列表然后对其进行排序来重新排序。当我运行应用程序时,添加到列表中的新项目总是添加到底部,而不是排序 FileCabinetsRetrieve是我的第一个列表框,FileCabinetsToAdd是我的第二个列表框 private void addBttn_Click(object sender, RoutedEventArgs e) { List<string> allItems = new List<stri

在添加/删除列表时,我试图通过存储到列表然后对其进行排序来重新排序。当我运行应用程序时,添加到列表中的新项目总是添加到底部,而不是排序

FileCabinetsRetrieve是我的第一个列表框,FileCabinetsToAdd是我的第二个列表框

    private void addBttn_Click(object sender, RoutedEventArgs e)
    {
        List<string> allItems = new List<string>();
        List<string> addedItems = new List<string>();
        List<string> remainingItems = new List<string>();

        //adding all items in FileCabinetsretreived into allItems list
        foreach (var item in FileCabinetsRetrieved.Items)
        {
            allItems.Add(item.ToString());
        }

        //sorting all items list
        allItems = allItems.OrderBy(x => x).ToList();

        //adding Selected items to addedItems list
        foreach (var item in FileCabinetsRetrieved.SelectedItems)
        {
            addedItems.Add(item.ToString());
        }

        //sorting addedItems list
        addedItems = addedItems.OrderBy(x => x).ToList();

        // creating list of remaining items = allitems - addedItems
        remainingItems = allItems.Except(addedItems).ToList();

        //sorting remainingItems list
        remainingItems = remainingItems.OrderBy(x => x).ToList();

        //adding list of selected items to the FileCabinetsToAdd list
        foreach (var item in addedItems)
        {
                FileCabinetsToAdd.Items.Add(item);
        }

        //clearing FileCabinetsRetreived list
        FileCabinetsRetrieved.Items.Clear();

        //adding remainingItems list to FileCabinetsRetreived list
        foreach (var item in remainingItems)
        {
            FileCabinetsRetrieved.Items.Add(item.ToString());
        }

    }
private void addBttn\u单击(对象发送方,路由目标)
{
列表所有项=新列表();
List addedItems=新列表();
List REMAININGIEMS=新列表();
//将FileCabinetsRetrieve中的所有项目添加到allItems列表中
foreach(FileCabinetsRetrieved.Items中的var项)
{
添加(item.ToString());
}
//对所有项目列表进行排序
allItems=allItems.OrderBy(x=>x.ToList();
//将所选项目添加到addedItems列表
foreach(FileCabinetsRetrieved.SelectedItems中的var项)
{
addedItems.Add(item.ToString());
}
//排序加法表
addedItems=addedItems.OrderBy(x=>x.ToList();
//创建剩余项列表=所有项-添加项
remainingItems=allItems.Exception(addedItems.ToList();
//对剩余项目列表进行排序
remainingItems=remainingItems.OrderBy(x=>x.ToList();
//将选定项目的列表添加到FileCabinetsToAdd列表
foreach(附录中的var项)
{
filecabinetostoadd.Items.Add(item);
}
//正在清除文件柜目录列表
FileCabinetsRetrieved.Items.Clear();
//将剩余项列表添加到FileCabinetRestreved列表
foreach(剩余项目中的var项目)
{
FileCabinetsRetrieved.Items.Add(item.ToString());
}
}

好的,您应该对FileCabinetsToAdd列表框中的项目进行排序。为此,可以使用listbox的sort属性:

FileCabinetsToAdd.Sorted = true;
那条线应该可以

如果需要自定义排序,则应:

  • 备份列表中的项目
  • 清除整个FileCabinetsToAdd.Items集合
  • 将新项目添加到该列表中
  • 对列表排序
  • 将列表中的每个项目添加到文件CabinetsToAdd.Items

  • 好的,您应该对FileCabinetsToAdd列表框中的项目进行排序。为此,可以使用listbox的sort属性:

    FileCabinetsToAdd.Sorted = true;
    
    那条线应该可以

    如果需要自定义排序,则应:

  • 备份列表中的项目
  • 清除整个FileCabinetsToAdd.Items集合
  • 将新项目添加到该列表中
  • 对列表排序
  • 将列表中的每个项目添加到文件CabinetsToAdd.Items

  • 这将是我的添加按钮点击事件,虽然我没有运行它,所以可能会有一些错误,但这是一个好的开始

    List<string> toSort = new List<string>();    
    
    foreach (var item in FileCabinetsRetrieved.SelectedItems)
            {
                FileCabinetsRetrieved.Items.Remove(item);
                toSort.Add(item);
            }
    foreach (var item in FileCabinetsToAdd.Items)
            {
                toSort.Add(item);
            }
    
    toSort = toSort.OrderBy(x => x).ToList();
    FileCabinetsToAdd.Items.Clear();
    foreach (var item in toSort)
    {
        FileCabinetsToAdd.Items.Add(item);
    }
    
    List-toSort=新列表();
    foreach(FileCabinetsRetrieved.SelectedItems中的var项)
    {
    FileCabinetsRetrieved.Items.Remove(item);
    toSort.Add(项目);
    }
    foreach(FileCabinetsToAdd.Items中的var项)
    {
    toSort.Add(项目);
    }
    toSort=toSort.OrderBy(x=>x.ToList();
    FileCabinetsToAdd.Items.Clear();
    foreach(toSort中的变量项)
    {
    filecabinetostoadd.Items.Add(item);
    }
    

    重要的部分是清除列表,然后再次添加所有已排序的项目。

    这将是我的添加按钮单击事件,虽然我没有运行它,因此可能会出现一些错误,但这是一个良好的开始

    List<string> toSort = new List<string>();    
    
    foreach (var item in FileCabinetsRetrieved.SelectedItems)
            {
                FileCabinetsRetrieved.Items.Remove(item);
                toSort.Add(item);
            }
    foreach (var item in FileCabinetsToAdd.Items)
            {
                toSort.Add(item);
            }
    
    toSort = toSort.OrderBy(x => x).ToList();
    FileCabinetsToAdd.Items.Clear();
    foreach (var item in toSort)
    {
        FileCabinetsToAdd.Items.Add(item);
    }
    
    List-toSort=新列表();
    foreach(FileCabinetsRetrieved.SelectedItems中的var项)
    {
    FileCabinetsRetrieved.Items.Remove(item);
    toSort.Add(项目);
    }
    foreach(FileCabinetsToAdd.Items中的var项)
    {
    toSort.Add(项目);
    }
    toSort=toSort.OrderBy(x=>x.ToList();
    FileCabinetsToAdd.Items.Clear();
    foreach(toSort中的变量项)
    {
    filecabinetostoadd.Items.Add(item);
    }
    

    重要的部分是清除列表,然后再次添加所有已排序的项目。

    我已经阅读了您的代码,但我不完全确定您想要完成什么。也许UI图片可以帮助我理解你的问题。只是提醒一下:您没有对代码中的FileCabinetToAdd.Items进行排序(为了这样做,您需要像处理FileCabinesRetrieved一样进行排序)。右边的列表框没有按字母顺序添加项目,这是该方法应该做的事情。我已经阅读了您的代码,但我不完全确定您想要完成什么。也许UI图片可以帮助我理解你的问题。只是提醒一下:您没有对代码中的FileCabinetToAdd.Items进行排序(为了这样做,您需要像处理FileCabinesRetrieved一样进行排序)。右边的列表框没有按字母顺序添加项目,这是该方法应该做的,问题是我没有以相同的方式更新第二个列表框。我最终重写了整个方法问题,因为我没有以同样的方式更新第二个列表框。我最终改写了整个方法