예제 #1
0
        protected override void OnInitialized(EventArgs e)
        {
            this.AddHandler (GridViewColumnHeader.ClickEvent, new RoutedEventHandler (GridViewColumnHeaderClickedHandler));

            GridView gridView = this.View as GridView;
            if (gridView != null)
            {
                SortableGridViewColumn sortableGridViewColumn = null;
                foreach (GridViewColumn gridViewColumn in gridView.Columns)
                {
                    sortableGridViewColumn = gridViewColumn as SortableGridViewColumn;
                    if (sortableGridViewColumn != null)
                    {
                        if (sortableGridViewColumn.IsDefaultSortColumn)
                        {
                            break;
                        }
                        sortableGridViewColumn = null;
                    }
                }

                if (sortableGridViewColumn != null)
                {
                    m_lastSortedOnColumn = sortableGridViewColumn;
                    Sort (sortableGridViewColumn.SortPropertyName, ListSortDirection.Ascending);

                    if (!String.IsNullOrEmpty (this.ColumnHeaderSortedAscendingTemplate))
                    {
                        sortableGridViewColumn.HeaderTemplate = this.TryFindResource (ColumnHeaderSortedAscendingTemplate) as DataTemplate;
                    }
                    this.SelectedIndex = 0;
                }
            }

            base.OnInitialized (e);
        }
예제 #2
0
        private void GridViewColumnHeaderClickedHandler(object sender, RoutedEventArgs e)
        {
            GridViewColumnHeader headerClicked = e.OriginalSource as GridViewColumnHeader;

            if (headerClicked != null && headerClicked.Role != GridViewColumnHeaderRole.Padding)
            {
                SortableGridViewColumn sortableGridViewColumn = (headerClicked.Column) as SortableGridViewColumn;
                if (sortableGridViewColumn != null && !String.IsNullOrEmpty (sortableGridViewColumn.SortPropertyName))
                {
                    ListSortDirection direction;
                    bool newSortColumn = false;

                    if (m_lastSortedOnColumn == null
                        || String.IsNullOrEmpty (m_lastSortedOnColumn.SortPropertyName)
                        || !String.Equals (sortableGridViewColumn.SortPropertyName, m_lastSortedOnColumn.SortPropertyName,
                        StringComparison.InvariantCultureIgnoreCase))
                    {
                        newSortColumn = true;
                        direction = ListSortDirection.Ascending;
                    }
                    else
                    {
                        if (m_lastDirection == ListSortDirection.Ascending)
                        {
                            direction = ListSortDirection.Descending;
                        }
                        else
                        {
                            direction = ListSortDirection.Ascending;
                        }
                    }

                    string sortPropertyName = sortableGridViewColumn.SortPropertyName;
                    Sort (sortPropertyName, direction);

                    if (direction == ListSortDirection.Ascending)
                    {
                        if (!String.IsNullOrEmpty (this.ColumnHeaderSortedAscendingTemplate))
                        {
                            sortableGridViewColumn.HeaderTemplate = this.TryFindResource (ColumnHeaderSortedAscendingTemplate) as DataTemplate;
                        }
                        else
                        {
                            sortableGridViewColumn.HeaderTemplate = null;
                        }
                    }
                    else
                    {
                        if (!String.IsNullOrEmpty (this.ColumnHeaderSortedDescendingTemplate))
                        {
                            sortableGridViewColumn.HeaderTemplate = this.TryFindResource (ColumnHeaderSortedDescendingTemplate) as DataTemplate;
                        }
                        else
                        {
                            sortableGridViewColumn.HeaderTemplate = null;
                        }
                    }

                    if (newSortColumn && m_lastSortedOnColumn != null)
                    {
                        if (!String.IsNullOrEmpty (this.ColumnHeaderNotSortedTemplate))
                        {
                            m_lastSortedOnColumn.HeaderTemplate = this.TryFindResource (ColumnHeaderNotSortedTemplate) as DataTemplate;
                        }
                        else
                        {
                            m_lastSortedOnColumn.HeaderTemplate = null;
                        }
                    }
                    m_lastSortedOnColumn = sortableGridViewColumn;
                }
            }
        }