Exemple #1
0
        private void Sort_Click(object sender, RoutedEventArgs e)
        {
            if (this.sortMembers != null && this.list.SelectedItems.Count > 0)
            {
                List <CodeMember>            selectedMembers = this.list.SelectedItems.Cast <CodeMember>().ToList();
                Dictionary <CodeMember, int> selectedIndexes = selectedMembers
                                                               .ToDictionary(member => member, member => this.observableMembers.IndexOf(member));

                foreach (var typeGroup in selectedMembers.GroupBy(member => member.TypeElement))
                {
                    List <CodeMember> typeMembers = typeGroup.ToList();
                    this.sortMembers(typeMembers);

                    // Get the selected indexes for the current type members in index order (i.e., from top to bottom in the list).
                    List <int> sortedIndexes = typeMembers.Select(member => selectedIndexes[member]).OrderBy(index => index).ToList();
                    int        itemCount     = sortedIndexes.Count;

                    // First, we have to take all the items out of the list.  The ListView's data binding
                    // logic gets really confused if we ever have the same item in the list multiple times,
                    // and it can't restore SelectedItems properly after that.  By nulling all the items
                    // out first, we can replace the items in sorted order, and data binding stays happy.
                    foreach (int index in sortedIndexes)
                    {
                        this.observableMembers[index] = null;
                    }

                    // Put the sorted members back in the type's selected ListView rows (but in sorted order).
                    for (int i = 0; i < itemCount; i++)
                    {
                        CodeMember member = typeMembers[i];
                        int        index  = sortedIndexes[i];
                        this.observableMembers[index] = member;
                    }
                }

                // Restore the list's selected items now that they're replaced in sorted order.
                // Note: this.list.SelectedItems should be empty now because we temporarily
                // nulled out all the selected items above.
                foreach (var pair in selectedIndexes)
                {
                    this.list.SelectedItems.Add(pair.Key);
                }
            }
        }
Exemple #2
0
        private static bool IsOrderedByGroupingProperty(List <CodeMember> members, Tuple <MemberProperty, bool> groupingProperty)
        {
            bool result = true;

            CodeMember previousMember = null;

            foreach (CodeMember member in members)
            {
                if (previousMember != null && previousMember.CompareByMemberProperty(member, groupingProperty) > 0)
                {
                    result = false;
                    break;
                }

                previousMember = member;
            }

            return(result);
        }