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

Listbox not sorting in WPF application

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

FileCabinetsRetreived 是我的第一个列表框,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());
        }

    }

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

FileCabinetsToAdd.Sorted = true;

该行应该可以完成工作。

如果您需要自定义排序,那么您应该:

  1. 备份列表中的项目
  2. 清除整个 FileCabinetsToAdd.Items 集合
  3. 将新项目添加到该列表
  4. 对列表进行排序
  5. 将列表中的每一项添加到 FileCabinetsToAdd.Items

这将是我的 Add_button 点击事件,虽然我没有 运行 它所以可能有一些错误,但这是一个好的开始。

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);
}

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