title: ObservableCollection not Sorting
body: <p>I am writing an MVVM application but I am having trouble with an Observable Collection.
  The ObservableCollection is held in the view model as:</p>
  
  <pre><code>private ObservableCollection&lt;Participant&gt; _initiativeList;
  public ObservableCollection&lt;Participant&gt; InitiativeList
  {
      get { return _initiativeList; }
      set
      {
          _initiativeList = value;
          OnPropertyChanged("InitiativeList");
      }
  }
  </code></pre>
  
  <p>In the XAML I have a list box :</p>
  
  <pre><code>    &lt;ListBox x:Name="lvInitiativeList"
                DockPanel.Dock="Top"
                ItemsSource="{Binding Source={StaticResource InitiativeListCollection}}"
                ItemTemplate="{StaticResource ResourceKey=ParticipantDisplayPanel}"
                SelectedItem="{Binding Path=SelectedParticipant}"/&gt;
  </code></pre>
  
  <p>The collectionViewSource it uses is:</p>
  
  <pre><code>&lt;CollectionViewSource Source="{Binding Path=InitiativeList, Mode=OneWay}"
                        x:Key="InitiativeListCollection"&gt;
      &lt;CollectionViewSource.SortDescriptions&gt;
          &lt;scm:SortDescription PropertyName="InitiativeScore" Direction="Descending"/&gt;
      &lt;/CollectionViewSource.SortDescriptions&gt;
  &lt;/CollectionViewSource&gt;
  </code></pre>
  
  <p>and the Item Template is:</p>
  
  <pre><code>&lt;DataTemplate x:Key="ParticipantDisplayPanel"&gt;
      &lt;uc:ParticipantDisplayPanel/&gt;
  &lt;/DataTemplate&gt;
  </code></pre>
  
  <p>the ParticipantDisplayPanel is a UserControl defined as:</p>
  
  <pre><code>&lt;UserControl x:Class="InitiativeList.View.UserControls.ParticipantDisplayPanel"
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
               xmlns:local="clr-namespace:InitiativeList.View.UserControls"&gt;
      &lt;UserControl.Resources&gt;
          &lt;ResourceDictionary&gt;
              &lt;ResourceDictionary.MergedDictionaries&gt;
                  &lt;ResourceDictionary Source="..\Resources\CommonStyles.xaml"/&gt;
                  &lt;ResourceDictionary Source="..\Resources\ConverterDictionary.xaml"/&gt;
              &lt;/ResourceDictionary.MergedDictionaries&gt;
          &lt;/ResourceDictionary&gt;
      &lt;/UserControl.Resources&gt;
      &lt;Border BorderBrush="{Binding Path=ActionState, Mode=OneWay, Converter={StaticResource BorderHighlight}}"  
              BorderThickness="3"
              CornerRadius="10"
              Background="{Binding Path=Kind, Mode=OneTime, Converter={StaticResource KindColor}}"&gt;
          &lt;StackPanel Orientation="Horizontal"
                      Width="450"
                      Height="50"
                      Background="Transparent"&gt;
              &lt;Border BorderBrush="Black"
                      BorderThickness="2"
                      Width="50"
                      Height="50"
                      CornerRadius="25"
                      Background="#FF8040"&gt;
              &lt;TextBlock x:Name="tbInitiative"
                         HorizontalAlignment="Center"
                         VerticalAlignment="Center"
                         FontSize="30"
                         Text="{Binding Path=InitiativeScore, 
                                        Mode=OneWay, 
                                        Converter={StaticResource InitiativeScore}}"/&gt;
              &lt;/Border&gt;
              &lt;TextBlock x:Name="tbName"
                         Background="Transparent"
                         Width="250"
                         Height="25"
                         FontFamily="Ariel"
                         FontWeight="Bold"
                         FontSize="20"
                         Text="{Binding Path=Name, Mode=OneWay}"/&gt;
              &lt;TextBlock x:Name="Condition"
                         Background="Transparent"
                         Width="100"
                         Height="25"
                         Text="{Binding Path=Condition, Mode=OneWay}"/&gt;
              &lt;Border BorderBrush="Black"
                      BorderThickness="2"
                      Width="50"
                      Height="50"
                      CornerRadius="25"
                      Background="{Binding Path=Healthiness, Mode=OneWay, 
                                                                Converter={StaticResource HPBackground}}"&gt;
                  &lt;TextBlock x:Name="tbHitPoints"
                             HorizontalAlignment="Center"
                             VerticalAlignment="Center"
                             FontSize="25"
                             Text="{Binding Path=CurrentHitPoints, Mode=OneWay}"/&gt;
              &lt;/Border&gt;
          &lt;/StackPanel&gt;
      &lt;/Border&gt;
  &lt;/UserControl&gt;
  </code></pre>
  
  <p>When I add items to the observable collection the items appear in the ListBox, and when I update properties of the elements the ParticipantDisplayPanels update to reflect the changed data.  However the collection does not sort in response to these changes, unless I specifically call OnPropertyChanged for the list, something I was expecting to be done as part of the function of the ObservableCollection, or at least through the Set code on the InitiativeList Property.
  It feels wrong to have to pepper the OnPropertyChanged calls throughout the code. Am I doing something wrong? all my searches on the internet haven't turned up an example of an Observable Collection that I can relate to how I've written my code.</p>
  
  <p>Any pointers as to what is going wrong would be much appreciated.</p>