using System; using System.Collections; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Globalization; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows; using System.Windows.Data; namespace Tango.SharedUI.Converters { public class ObservableCollectionToViewSourceConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { String sortMember = parameter != null ? parameter.ToString() : null; IList list = value as IList; if (list != null) { var view = CollectionViewSource.GetDefaultView(list); view.SortDescriptions.Clear(); //Delay because the DataGrid clears the sort description after source change. Task.Factory.StartNew(() => { Thread.Sleep(10); Application.Current.Dispatcher.BeginInvoke(new Action(() => { view.SortDescriptions.Add(new SortDescription(sortMember, ListSortDirection.Ascending)); view.Refresh(); })); }); return view; } return value; } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } }