1

.NET 中是否有一个作为只读有序视图的类List<T>?与必须具有相同关系的东西List<T>,以便我可以配置我希望对此视图进行排序的属性,然后视图将监视列表并在将项目添加到列表中/从列表中删除时自动更新自身。DataViewDataTable

OrderBy注意,每次我需要迭代列表时,我都可以使用 LINQ来完成,但是看看我需要迭代的次数,这看起来有点矫枉过正。

编辑: A DataView(据我所知)不会每次都重新创建表行的有序副本。它在构造函数中获取排序列名称,然后密切关注底层DataTable的更改并即时更新自身,而不是在我们迭代视图时从头开始重新创建视图。

4

3 回答 3

1

对于集合的单独ViewModel(因此您可以将同一集合的不同“形状”呈现给调用者),BCL 中没有任何内容,我也不知道。所以你必须自己构建它。但是要跟踪集合内的变化(注意,而不是该集合内的对象),您可以使用ObservableCollection

于 2013-09-18T11:00:53.410 回答
0

您也许可以使用SortedList.

它有一个SortedList(IComparer)构造函数,您可以将自定义比较器传递给该构造函数,该比较器定义要对哪些字段进行排序。

于 2013-09-18T11:02:31.367 回答
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));
}

查看文章中的更多信息 -如何:对视图中的数据进行排序

于 2013-09-18T11:06:20.910 回答