你说你的数据是 “字符串数组列表” - 你的意思
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;
}
但是,如果你正在处理一个列表<字符串>所谓的“项目”,那么这种方法本身不会起作用。你必须兼顾周围的一些东西,要做到这一点:
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;
}
类似,但不同的:)由于排序中所发生的,它实际上只是排序的阵列,而不是实际列表<串>我们是使用。
现在注意清理ItemsSource之前和之后的重置。我玩了一下,但没有采取这两个步骤就无法正常工作。我认为这是数据绑定基础架构中的某个细节。我尝试使用一个字符串[],List和ObservableCollection,但每次都必须清除并重置ItemsSource以重新获取ListBox。
您对Convert.ToDateTime()的评论对我来说似乎没有问题。我也试过DateTime.Parse(),那也起作用。问题原来是在ListBox.ItemsSource的清除和重新分配。
有谁知道为什么ListBox的行为是这样吗?这是简单的我忘记了吗?
这可以在.NET 4/LINQPad中正常工作 - 我在Windows 7(不是电话)和英语区域设置(区域设置问题)。可能希望列出由Convert生成的DateTime,它们可能不如预期。 ('Convert.ToDateTime(string)'很难“正常工作”,这可能不是所期望的“工作”结果。) – 2011-08-11 01:26:35