public AncestryBrowserWindowViewModel(TypeInfo typeInfo)
        {
            _typeInfo = typeInfo;

            ExpandCollapseAllCommand = new DelegateCommand(ExpandCollapseAllCommandHandler);

            _options = new MemberOptions
            {
                ShowProperties = true,
                ShowEvents = true,
                ShowMethods = true,
                ShowProtected = true,
                ShowProtectedInternal = true,
                ShowPublic = true
            };

            _typeViewModel = new TypeViewModel(_typeInfo);

            _ancestry = _typeViewModel.Ancestry.ToList();
            _ancestry.Last().IsLast = true;
            _assemblies = _ancestry
                .GroupBy(t => t.TypeInfo.Module.Assembly)
                .Select(g => new AssemblyViewModel(g.Key, g))
                .ToList();

            int currentIndex = 0;
            foreach (var assembly in _assemblies)
            {
                var brush = BrushProvider.BrushPairs[currentIndex].Background as SolidColorBrush;
                brush = new SolidColorBrush(
                    new Color { A = 72, R = brush.Color.R, G = brush.Color.G, B = brush.Color.B});

                assembly.BackgroundBrush = brush;
                assembly.CaptionBrush = BrushProvider.BrushPairs[currentIndex].Caption;
                currentIndex++;
                if (currentIndex == BrushProvider.BrushPairs.Count)
                {
                    currentIndex = 0;
                }
            }

            KindGroup = new CommandsGroupViewModel(
                    Resources.Members,
                    new List<GroupedUserCommand>
                     	{
                            new GroupedUserCommand(Resources.All, ShowAllMemberKinds, true),
                            new GroupedUserCommand(Resources.Virtual, ShowVirtualMembers)
                        });

            UpdateMembers();
            FillToolTips();
        }
        private void InitializeSearchControl()
        {
            var sortingGroup = new CommandsGroupViewModel(
                    Resources.SortBy,
                    new List<GroupedUserCommand>
                        {
                            new GroupedUserCommand(Resources.Name, SortByName),
                            new GroupedUserCommand(Resources.DescendantsCount, SortByDescendantsCount, true),
                            new GroupedUserCommand(Resources.MembersCount, SortByMembersCount)
                        });

            var filteringByTypeGroup = new CommandsGroupViewModel(
                    Resources.Types,
                    new List<GroupedUserCommand>
                     	{
                            new GroupedUserCommand(Resources.All, ShowAllTypes, true),
                            new GroupedUserCommand(Resources.Interfaces, ShowInterfaces),
                            new GroupedUserCommand(Resources.ValueTypes, ShowValueTypes),
                            new GroupedUserCommand(Resources.Enums, ShowEnums)
                        });

            var filteringByVisibilityGroup = new CommandsGroupViewModel(
                    Resources.Visibility,
                    new List<GroupedUserCommand>
                     	{
                            new GroupedUserCommand(Resources.Any, ShowAnyVisibility, true),
                            new GroupedUserCommand(Resources.Public, ShowPublicTypes),
                            new GroupedUserCommand(Resources.Internal, ShowInternalTypes)
                        });

            SearchControlGroups = new ObservableCollection<CommandsGroupViewModel>
                                  	{
                                  		sortingGroup,
                                        filteringByTypeGroup,
                                        filteringByVisibilityGroup
                                  	};
        }