public void ReloadList()
        {
            listView.BeginUpdate();

            listView.Items.Clear();

            var newListItems = ManualOrdering ? _itemListEnumerator : _itemListEnumerator.OrderBy(x => x.Name);

            Func <IBasicInfo, ListViewItem> createLvi =
                x => new ListViewItem(new[] { x.Name, x.Enabled.ToString(), x.GetDetails(), TriggerCounter.GetCounter(x).ToString() })
            {
                Tag = x
            };

            if (_groupKeyGetter != null)
            {
                var groups       = new Dictionary <string, ListViewGroup>();
                var defaultGroup = new ListViewGroup("Ungrouped");
                groups.Add("Ungrouped", defaultGroup);
                foreach (var item in newListItems)
                {
                    var lvi      = createLvi(item);
                    var groupKey = _groupKeyGetter(item);
                    if (string.IsNullOrEmpty(groupKey))
                    {
                        defaultGroup.Items.Add(lvi);
                    }
                    else
                    {
                        ListViewGroup result;
                        if (!groups.TryGetValue(groupKey, out result))
                        {
                            result = new ListViewGroup(groupKey);
                            groups.Add(groupKey, result);
                        }
                        result.Items.Add(lvi);
                    }

                    listView.Items.Add(lvi);
                }

                listView.Groups.AddRange(groups.OrderBy(x => x.Key).Select(x => x.Value).ToArray());
            }
            else
            {
                listView.Items.AddRange(newListItems.Select(createLvi).ToArray());
            }

            listView.EndUpdate();
        }