private static void InitializeSortDirection(ListView listView) { #region Guards var dataSource = listView.ItemsSource; if (dataSource == null) return; var dataview = CollectionViewSource.GetDefaultView(dataSource); if (dataview == null || dataview.SortDescriptions.Count == 0) return; SortInfo sortInfo = listView.GetValue(SortInfoProperty.DependencyProperty) as SortInfo; if (sortInfo != null) return; #endregion foreach (var columnHeader in listView.FindChildren<GridViewColumnHeader>(h => h.Role != GridViewColumnHeaderRole.Padding)) { if (columnHeader.Column != null && dataview.SortDescriptions.Count > 0 && dataview.SortDescriptions[0].PropertyName.Equals(GetSortField(columnHeader.Column))) { sortInfo = new SortInfo(); sortInfo.LastSortColumn = columnHeader; sortInfo.CurrentAdorner = new VisualAdorner(columnHeader, new ListSortDecorator()); AdornerLayer.GetAdornerLayer(columnHeader).Add(sortInfo.CurrentAdorner); listView.SetValue(SortInfoProperty, sortInfo); break; } } }