按项目日期对ListView排序

本文关键字:ListView 排序 日期 项目 | 更新日期: 2023-09-27 18:25:01

我有一个ListView来显示一些图像(使用ImageList)。到目前为止一切都很好。我可以很容易地按Text属性对项目进行排序。但我希望能够按照它们的创建日期对它们进行排序(ASC或DESC)。

项目是这样创建的:

Item.Text = file name
item.Tag = file path

我正试图像这样对日期进行排序,但在对字典进行排序时没有成功,而且我也不知道如何将字典项重新投射到listview中:

private void menuViewSortDate_Click(object sender, EventArgs e)
{
    var files = new Dictionary<ListViewItem, DateTime>();
    foreach(ListViewItem item in listViewLoadedImages.Items)
    {
        files.Add(item, File.GetCreationTime(item.Tag.ToString()));
    }
    listViewLoadedImages.BeginUpdate();
    listViewLoadedImages.Items.Clear();
    // how to sort dictionary by DateTime ??
    // like files.Sort(bydate);
    //How can refer to key values (listviewitems) in dictionary
    listViewLoadedImages.Items.AddRange((ListViewItem)files.Keys); 
    listViewLoadedImages.EndUpdate();
} 

按项目日期对ListView排序

字典经过优化,可以快速检索,但这意味着内部顺序是未定义的,由内部实现指定。

如果需要为键指定特定的顺序,请使用SortedDictionary类,并在必要时向其传递一个IComparer来定义排序顺序。

正如Avner所说,字典默认情况下不会排序,但您可以使用一些LINQ通过以下操作返回IEnumerable:

var results = files.OrderBy(x=>x.Value);

我也不确定如何使ListViewItem作为您的密钥是唯一的,但是您可以尝试将字典密钥转换为

var lvItems = files.Keys.Cast<ListViewItem>();