列表框未在 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;
该行应该可以完成工作。
如果您需要自定义排序,那么您应该:
- 备份列表中的项目
- 清除整个 FileCabinetsToAdd.Items 集合
- 将新项目添加到该列表
- 对列表进行排序
- 将列表中的每一项添加到 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);
}
重要的部分是清除列表,然后再次添加所有已排序的项目。
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;
该行应该可以完成工作。
如果您需要自定义排序,那么您应该:
- 备份列表中的项目
- 清除整个 FileCabinetsToAdd.Items 集合
- 将新项目添加到该列表
- 对列表进行排序
- 将列表中的每一项添加到 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);
}
重要的部分是清除列表,然后再次添加所有已排序的项目。