我有一个数组列表,其中包含格式为
的数据2011年8月12日,2011年9月11日
我使用下面的代码进行排序:
Array.Sort(fileNames, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
我从上面的代码得到的结果是
排序后2011年9月11日,2011年8月12日
答案 0 :(得分:2)
你说你的数据是“字符串的数组列表” - 你的意思是
List<string>
或
string[]
?
它对您实现代码的方式有一点不同。假设你有一个实际的数组,那么代码非常简单,尽管不像我们想的那样干净:
private void SortButton_Click(object sender, RoutedEventArgs e)
{
ItemsListBox.ItemsSource = null;
Array.Sort(items, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
ItemsListBox.ItemsSource = items;
}
但是,如果您正在处理List&lt; string&gt;被称为“项目”,然后这种方法本身不会起作用。为了实现这个目标,你必须在处理一些事情:
private void SortButton_Click(object sender, RoutedEventArgs e)
{
ItemsListBox.ItemsSource = null;
var arrayOfItems = items.ToArray<string>();
Array.Sort(arrayOfItems, delegate(string first, string second)
{
return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
});
items = new List<string>(arrayOfItems);
ItemsListBox.ItemsSource = items;
}
类似,但不同:)由于排序发生在适当的位置,它实际上只是对数组进行排序而不是实际的List&lt; string&gt;我们正在使用。
现在 - 请注意清除ItemsSource之前和之后重置。我玩了一会儿,但没有完成这两个步骤就无法正常工作。我认为这是数据绑定基础设施中的某个细分。我尝试使用string [],List和ObservableCollection,但每次都必须清除并重置ItemsSource以重新绘制ListBox。
您对Convert.ToDateTime()的评论对我来说似乎不是问题。我也试过DateTime.Parse(),这也很有用。问题结果是清除和重新分配ListBox.ItemsSource。
有人知道为什么ListBox会这样吗?这简直就是我忘了吗?