title: Sorting WPF ListView with System.Linq.IGrouping<string,Class T>
body: <p>actually Im not getting problems with sorting a normal ListView.ItemsSource, my issue actually comes when I have a IGrouping List as ItemSource or SelectedItems, Im using the following snippet :</p>
  
  <pre><code>    private void Sort(string sortBy, ListSortDirection direction)
      {
          lastDirection = direction;
          ICollectionView dataView = CollectionViewSource.GetDefaultView(this.ItemsSource);
  
          dataView.SortDescriptions.Clear();
          SortDescription sd = new SortDescription(sortBy, direction);
          dataView.SortDescriptions.Add(sd);
          dataView.Refresh();
      }
  </code></pre>
  
  <p>when sortBy = some ListView Column, direction = ascending, descending (depends last sorting)</p>
  
  <p>so how can I set a ItemSource like the following : IList when T = myClass </p>
  
  <p>Thanks in advance!</p>
  
  <p>updated : </p>
  
  <p>Modified the above snippet :</p>
  
  <pre><code>private void Sort(string sortBy, ListSortDirection direction)
  {
      lastDirection = direction;
      ICollectionView dataView;
      if (this.Name.Equals("dlstPlantillas"))
      {
          List&lt;Plantilla&gt; newItemSource = new List&lt;Plantilla&gt;();
          var source = this.ItemsSource;
  
          foreach (var group in source)
          {
              System.Linq.IGrouping&lt;string, Plantilla&gt; groupCast = group as System.Linq.IGrouping&lt;string, Plantilla&gt;;
              if (null == groupCast) return;
              foreach (Plantilla item in groupCast)
              {
                  newItemSource.Add(item);
              }
          }
           dataView = CollectionViewSource.GetDefaultView(newItemSource);
      }
      else
      {
          dataView = CollectionViewSource.GetDefaultView(this.ItemsSource);
      }          
  
      dataView.SortDescriptions.Clear();
      SortDescription sd = new SortDescription(sortBy, direction);
      dataView.SortDescriptions.Add(sd);
      dataView.Refresh();
  }
  </code></pre>
  
  <p>Actually Im getting this stack :</p>
  
  <pre><code>System.ObjectDisposedException was unhandled by user code 
     Message = "Unable to access the deleted object. \ R \ nNombre object: 'It has a DataContext accessed after Dispose..'" 
     Source = "System.Data.Linq" 
     ObjectName = "It has been a DataContext accessed after Dispose." 
     Stacktrace: 
          in System.Data.Linq.DataQuery `1.System.Collections.IEnumerable.GetEnumerator () 
          in SRIMedico.com.SortableListView.Sort (String Sort, ListSortDirection direction) in D: \ cs_InformeMedico \ app \ SortableListView.cs: line 219 
          in SRIMedico.com.SortableListView.GridViewColumnHeaderClickedHandler (Object sender, RoutedEventArgs e) in D: \ cs_InformeMedico \ app \ SortableListView.cs: line 163 
          in System.Windows.RoutedEventHandlerInfo.InvokeHandler (Object target, RoutedEventArgs routedEventArgs) 
          in System.Windows.EventRoute.InvokeHandlersImpl (Object source, RoutedEventArgs args, Boolean reRaised) 
          in System.Windows.UIElement.RaiseEventImpl (DependencyObject sender, RoutedEventArgs args) 
          in System.Windows.UIElement.RaiseEvent (RoutedEventArgs e) 
          in System.Windows.Controls.Primitives.ButtonBase.OnClick () 
          in System.Windows.Controls.GridViewColumnHeader.ClickImplement () 
          in System.Windows.Controls.GridViewColumnHeader.OnClick () 
          in System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (MouseButtonEventArgs e) 
          in System.Windows.Controls.GridViewColumnHeader.OnMouseLeftButtonUp (MouseButtonEventArgs e) 
          in System.Windows.UIElement.OnMouseLeftButtonUpThunk (Object sender, MouseButtonEventArgs e) 
          in System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget) 
          in System.Windows.RoutedEventArgs.InvokeHandler (Delegate handler, Object target) 
          in System.Windows.RoutedEventHandlerInfo.InvokeHandler (Object target, RoutedEventArgs routedEventArgs) 
          in System.Windows.EventRoute.InvokeHandlersImpl (Object source, RoutedEventArgs args, Boolean reRaised) 
          in System.Windows.UIElement.ReRaiseEventAs (DependencyObject sender, RoutedEventArgs args, RoutedEvent newEvent) 
          in System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent (DependencyObject sender, MouseButtonEventArgs e) 
          in System.Windows.UIElement.OnMouseUpThunk (Object sender, MouseButtonEventArgs e) 
          in System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler (Delegate genericHandler, Object genericTarget) 
          in System.Windows.RoutedEventArgs.InvokeHandler (Delegate handler, Object target) 
          in System.Windows.RoutedEventHandlerInfo.InvokeHandler (Object target, RoutedEventArgs routedEventArgs) 
          in System.Windows.EventRoute.InvokeHandlersImpl (Object source, RoutedEventArgs args, Boolean reRaised) 
          in System.Windows.UIElement.RaiseEventImpl (DependencyObject sender, RoutedEventArgs args) 
          in System.Windows.UIElement.RaiseEvent (RoutedEventArgs args, Boolean trusted) 
          in System.Windows.Input.InputManager.ProcessStagingArea () 
          in System.Windows.Input.InputManager.ProcessInput (InputEventArgs input) 
          in System.Windows.Input.InputProviderSite.ReportInput (InputReport inputReport) 
          in System.Windows.Interop.HwndMouseInputProvider.ReportInput (IntPtr hwnd, InputMode mode, Int32 timestamp, RawMouseActions actions, Int32 x, Int32 and Int32 wheel) 
          in System.Windows.Interop.HwndMouseInputProvider.FilterMessage (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean &amp; handled) 
          in System.Windows.Interop.HwndSource.InputFilterMessage (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean &amp; handled) 
          in MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean &amp; handled) 
          in MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) 
          in System.Windows.Threading.ExceptionWrapper.InternalRealCall (Delegate callback, Object args, Boolean isSingleParameter) 
          in System.Windows.Threading.ExceptionWrapper.TryCatchWhen (Object source, Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) 
          in System.Windows.Threading.Dispatcher.WrappedInvoke (Delegate callback, Object args, Boolean isSingleParameter, Delegate catchHandler) 
          in System.Windows.Threading.Dispatcher.InvokeImpl (DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Boolean isSingleParameter) 
          in System.Windows.Threading.Dispatcher.Invoke (DispatcherPriority priority, Delegate method, Object arg) 
          in MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam) 
          in MS.Win32.UnsafeNativeMethods.DispatchMessage (MSG &amp; msg) 
          in System.Windows.Threading.Dispatcher.PushFrameImpl (DispatcherFrame frame) 
          in System.Windows.Threading.Dispatcher.PushFrame (DispatcherFrame frame) 
          in System.Windows.Window.ShowHelper (Object booleanBox) 
          in System.Windows.Window.Show () 
          in System.Windows.Window.ShowDialog () 
     InnerException:
  </code></pre>
  
  <p><strong><em>is so hard? :S</em></strong></p>