private void Repopulate() { if (_inRepopulate) { return; } try { _inRepopulate = true; if (!Equals(SelectedGroup, toolStripComboGroup.SelectedItem)) { listView1.Items.Clear(); } toolStripComboGroup.Items.Clear(); imageList1.Images.Clear(); var newItems = new List <ListViewItem>(); var newGroups = new List <ListViewGroup>(); if (null != ViewContext) { imageList1.Images.AddRange(ViewContext.GetImageList()); toolStripComboGroup.Items.AddRange(ViewContext.ViewGroups.ToArray()); IEnumerable <ViewGroup> groups; if (null != SelectedGroup) { groups = new[] { SelectedGroup }; listView1.View = View.List; } else { groups = ViewContext.ViewGroups; listView1.View = View.SmallIcon; } foreach (var group in groups) { var listViewGroup = new ListViewGroup(group.Id.Name, group.Label) { Tag = group }; newGroups.Add(listViewGroup); foreach (var viewSpec in ViewContext.GetViewSpecList(group.Id).ViewSpecs) { bool validRowSource = null != ViewContext.GetViewInfo(new ViewName(group.Id, viewSpec.Name)); if (FilterRowSources && !validRowSource) { continue; } var viewName = new ViewName(group.Id, viewSpec.Name); var item = new ListViewItem(viewSpec.Name, ViewContext.GetImageIndex(viewSpec)) { Name = viewName.ToString(), Group = listViewGroup, Tag = viewName, Checked = _checkedItems.Contains(viewName), }; if (!validRowSource && GrayDisabledRowSources) { item.ForeColor = SystemColors.GrayText; } newItems.Add(item); } } toolStripComboGroup.SelectedItem = SelectedGroup; } ReplaceItems(listView1, newGroups, newItems); } finally { _inRepopulate = false; } }