.NET中是否有一个类作为List<T>
的只读有序视图?与List<T>
DataView
DataTable
具有相同关系的内容,以便我可以配置我希望对此视图进行排序的属性,然后视图将监视列表当项目添加到列表中或从列表中删除时自动更新。
N.B。每次我需要迭代列表时,我都可以使用LINQ的OrderBy
来做,但是看一下我需要迭代的次数,这看起来有点过分。
编辑:DataView
(据我所知)每次都不会重新创建表行的有序副本。它在构造函数中采用排序列名称,然后密切关注基础DataTable
以进行更改并在运行时自行更新,而不是在迭代时从头开始重新创建视图
答案 0 :(得分:1)
对于单独的ViewModel
(因此您可以将相同集合的不同“形状”呈现给调用者),BCL中没有任何内容,也不是我所知道的。所以你必须自己构建它。但是为了跟踪集合内部的变化(注意,该集合中的不是对象),您可以使用ObservableCollection
答案 1 :(得分:0)
您可以使用SortedList
。
它有一个SortedList(IComparer)
构造函数,您可以传递一个自定义比较器来定义要排序的字段。
答案 2 :(得分:0)
您可以使用可视化控件对数据进行排序或过滤:
<Window x:Class="ListBoxSort_snip.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="ListBoxSort_snip" Height="300" Width="300">
<DockPanel>
<ListBox Name="myListBox" DockPanel.Dock="Top">
<ListBoxItem>my</ListBoxItem>
<!--Or you can set the content this way:-->
<!--<ListBoxItem Content="my"/>-->
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>Sort</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
<ListBoxItem>ListBox</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
</ListBox>
<Button Click="OnClick" Width="30" Height="20" DockPanel.Dock="Top">Sort</Button>
</DockPanel>
</Window>
private void OnClick(object sender, RoutedEventArgs e)
{
myListBox.Items.SortDescriptions.Add(
new SortDescription("Content", ListSortDirection.Descending));
}
查看文章中的更多信息 - How to: Sort Data in a View。