private void UpdateTopResult() { if (!SearchRootCategories.Any()) { TopResult = null; return; } // If SearchRootCategories has at least 1 element, it has at least 1 member. var firstMemberGroup = SearchRootCategories.First().MemberGroups.First(); var topMemberGroup = new SearchMemberGroup(firstMemberGroup.FullyQualifiedName); topMemberGroup.AddMember(firstMemberGroup.Members.First()); TopResult = topMemberGroup; }
/// <summary> /// Performs a search and updates the observable SearchResults property. /// </summary> /// <param name="query"> The search query </param> public void SearchAndUpdateResults(string query) { if (Visible != true) { return; } // deselect the last selected item if (visibleSearchResults.Count > SelectedIndex) { visibleSearchResults[SelectedIndex].IsSelected = false; } // if the search query is empty, go back to the default treeview if (string.IsNullOrEmpty(query)) { return; } // clear visible results list visibleSearchResults.Clear(); foreach (var category in SearchRootCategories) { category.DisposeTree(); } SearchRootCategories.Clear(); if (string.IsNullOrEmpty(query)) { return; } var result = Model.Search(query).Where(r => r.IsVisibleInSearch).Take(MaxNumSearchResults).ToList(); // Add top result var firstRes = result.FirstOrDefault(); if (firstRes == null) { return; //No results } var topResultCategory = new RootNodeCategoryViewModel("Top Result"); SearchRootCategories.Add(topResultCategory); var copy = MakeNodeSearchElementVM(firstRes); var catName = MakeShortCategoryString(firstRes.FullCategoryName); var breadCrumb = new NodeCategoryViewModel(catName) { IsExpanded = true }; breadCrumb.Entries.Add(copy); topResultCategory.SubCategories.Add(breadCrumb); topResultCategory.Visibility = true; topResultCategory.IsExpanded = true; SearchRootCategories.AddRange(CategorizeEntries(result, true)); visibleSearchResults.AddRange(SearchRootCategories.SelectMany(GetVisibleSearchResults)); if (visibleSearchResults.Any()) { SelectedIndex = 0; visibleSearchResults[0].IsSelected = true; } SearchResults.Clear(); foreach (var x in visibleSearchResults) { SearchResults.Add(x); } }