Change UI display order of an ObservableCollection
To sort your ObservableCollection you should be using data-binding and let WPF do the work.

First let's fix the ComboBox that you currently populate manually. For the sake of this review I assume you use your code-behind file as a data-source that is bound to the Window via:

DataContext="{Binding RelativeSource={RelativeSource Self}}"


Next you need to tell the ComboBox where to find the items and how to display them:

&lt;ComboBox 
    ItemsSource="{Binding OrderOptions}" 
    DisplayMemberPath="Description" 
    SelectedValuePath="OrderBy" 
    SelectionChanged="Selector_OnSelectionChanged"&gt;
&lt;/ComboBox&gt;


It receives the values from the code-behind property (you of course would read the descriptions here with your reflection helpers):

public IEnumerable&lt;OrderOption&gt; OrderOptions
{
    get
    {
        return
            Enum
                .GetValues(typeof(OrderBy))
                .Cast&lt;OrderBy&gt;()
                .Select(x =&gt; new OrderOption { OrderBy = x, Description = x.ToString() });
    }
}


I created a helper object for this combo-box that looks like this:

public class OrderOption
{
    public OrderBy OrderBy { get; set; }

    public string Description { get; set; }
}


Now we need a list of videos:

private ObservableCollection&lt;Video&gt; _videos = new ObservableCollection&lt;Video&gt;(new[]
{
    new Video { Name = "Rambo", Rating = 3},
    new Video { Name = "Rocky", Rating = 8},
    new Video { Name = "Turbo Interceptor", Rating = 1}
});


where the Video is implemented as:

public class Video
{
    public string Name { get; set; }

    public int Rating { get; set; }
}


and the code-behind file has this property:

public ObservableCollection&lt;Video&gt; Videos =&gt; _videos;


Now comes the tricky part. You need to add a new resource to the resource-dictionary. This is a CollectionViewSource that initially will sort the items by Name. 

&lt;Window.Resources&gt;
    &lt;ResourceDictionary&gt;
        &lt;CollectionViewSource x:Key="SortedVideos" Source="{Binding Videos}"&gt;
            &lt;CollectionViewSource.SortDescriptions&gt;
                &lt;scm:SortDescription PropertyName="Name"&gt;&lt;/scm:SortDescription&gt;
            &lt;/CollectionViewSource.SortDescriptions&gt;
        &lt;/CollectionViewSource&gt;
    &lt;/ResourceDictionary&gt;
&lt;/Window.Resources&gt;


In order for this to work you need to add a new namespace:

xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"


Now you can bind a ListView to it:

&lt;ListView 
    ItemsSource="{Binding Source={StaticResource SortedVideos}}" 
    DisplayMemberPath="Name"&gt;
&lt;/ListView&gt;


You have probably noticed the combo-box has this Selector_OnSelectionChanged event handler that in code-behind is implemented like this to get the currently select OrderBy, then the switch is used to change the sorting by first clearing the current settings and adding a new one that changes the property of the Video object that is used for sorting. In this example I only used the Name and the Rating. Now each time you change the selection WPF will update the ListView and if you add or delete an item it will use the current setting to re-order it.

private void Selector_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
    var colView = Resources["SortedVideos"] as CollectionViewSource;
    switch (((sender as ComboBox).SelectedItem as OrderOption).OrderBy)
    {
        case OrderBy.Name:
            colView.SortDescriptions.Clear();
            colView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
            break;
        case OrderBy.Rating:
            colView.SortDescriptions.Clear();
            colView.SortDescriptions.Add(new SortDescription("Rating", ListSortDirection.Ascending));
            break;
    }
}