public static void RestoreSorting(DataGridSortDescription sortDescription, DataGrid grid)
        {
            if (sortDescription.SortDescription != null && sortDescription.SortDescription.Count == 0)
            {
                if (PluginSettings.Instance.EnableAutomaticSorting)
                {
                    if (PluginSettings.Instance.SortOnColumnIndex >= 0 && PluginSettings.Instance.SortOnColumnIndex < grid.Columns.Count)
                    {
                        SortDescription sd = new SortDescription(grid.Columns[PluginSettings.Instance.SortOnColumnIndex].SortMemberPath, PluginSettings.Instance.SortDirection == 0 ? ListSortDirection.Ascending : ListSortDirection.Descending);
                        sortDescription.SortDescription.Add(sd);
                    }
                }
            }
            //restore the column sort order
            if (sortDescription.SortDescription != null && sortDescription.SortDescription.Count > 0)
            {
                ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
                view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
                sortDescription.SortDescription.ToList().ForEach(x => view.SortDescriptions.Add(x));
                view.Refresh();
            }

            //restore the sort directions. Arrows are nice :)
            foreach (DataGridColumn c in grid.Columns)
            {
                if (sortDescription.SortDirection.ContainsKey(c))
                {
                    c.SortDirection = sortDescription.SortDirection[c];
                }
            }
        }
 private void UpdateListFilter(bool preserveSort)
 {
     if (_orgSourceList != null)
     {
         DataGridSortDescription sort = null;
         if (preserveSort) sort = DataGridUtil.SaveSorting(cacheList);
         if (string.IsNullOrEmpty(_filterOnText))
         {
             cacheList.ItemsSource = _orgSourceList;
         }
         else
         {
             string s = _filterOnText.ToLower();
             cacheList.ItemsSource = (from a in _orgSourceList
                                      where (a.City!=null && a.City.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      (a.Name!=null && a.Name.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      (a.Country!=null && a.Country.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      (a.State != null && a.State.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      (a.Municipality != null && a.Municipality.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      (a.Owner != null && a.Owner.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0) ||
                                      a.Code.ToLower().IndexOf(s, StringComparison.OrdinalIgnoreCase) >= 0
                                      select a).ToList();
         }
         if (preserveSort) DataGridUtil.RestoreSorting(sort, cacheList);
     }
 }
        public static DataGridSortDescription SaveSorting(DataGrid grid)
        {
            DataGridSortDescription sortDescription = new DataGridSortDescription();

            //Save the current sort order of the columns
            ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource);
            SortDescriptionCollection sortDescriptions = new SortDescriptionCollection();
            if (view != null)
            {
                view.SortDescriptions.ToList().ForEach(sd => sortDescriptions.Add(sd));
            }
            sortDescription.SortDescription = sortDescriptions;

            //save the sort directions (these define the little arrow on the column header...)
            IDictionary<DataGridColumn, ListSortDirection?> sortDirections = new Dictionary<DataGridColumn, ListSortDirection?>();
            foreach (DataGridColumn c in grid.Columns)
            {
                sortDirections.Add(c, c.SortDirection);
            }
            sortDescription.SortDirection = sortDirections;

            return sortDescription;
        }
 public void UpdateDataGrid(IEnumerable<Framework.Data.Geocache> list)
 {
     _orgSourceList = list;
     //using (var d = Dispatcher.DisableProcessing())
     //if (!_ignoreUpdate)
     {
         DataGridSortDescription sort = DataGridUtil.SaveSorting(cacheList);
         cacheList.ItemsSource = null;
         if (string.IsNullOrEmpty(_filterOnText))
         {
             cacheList.ItemsSource = list;
         }
         else
         {
             UpdateListFilter(false);
         }
         if (PluginSettings.Instance.EnableAutomaticSorting)
         {
             DataGridUtil.RestoreSorting(sort, cacheList);
         }
     }
     _ignoreUpdate = false;
 }