Question: Is there a class in .NET that works as a read-only ordered view for `List<T>`? Something that has the same relation to `List<T>` that `DataView` has to `DataTable`, so that I could configure the property on which I want this view to be sorted and then the view would monitor the list and automatically update itself when items are added to/removed from the list.

N.B. I could do it using LINQ's `OrderBy` every time I need to iterate over the list, but looking at the number of times I need to iterate, this looks like some overkill.

**Edit:** A `DataView` (as far as I understand) doesn't do recreate an ordered copy of the table rows every time. It takes the sort column name in the constructor and then *keeps an eye* on the underlying `DataTable` for changes and updates itself on-the-fly instead of recreating the view from scratch when we iterate it.

Answer: 
For separate `ViewModel` (so you can have different "shapes" of the same collection presented to the caller) of the collection, there is nothing present in BCL, nor that I'm aware of. So you have to build it yourself. But for tracking changes inside collection (attention, *not objects* inside that collection) you can use [ObservableCollection](http://msdn.microsoft.com/en-us/library/ms668604.aspx)
You can use visual control for sorting or filtering your data:

```
<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));
}

```

Check out more information in the article - [How to: Sort Data in a View](http://msdn.microsoft.com/en-us/library/ms754073.aspx).