private void OnSearchStatusChanged(object sender, DataModel.SearchStatus status)
 {
     if (_dataModel.OperationCompleted)
     {
         BtnAddFolderEnabled         = true;
         BtnDelFolderEnabled         = (lv_Folders.SelectedItems.Count > 0) ? true : false;
         BtnStartSearchEnabled       = (lv_Folders.Items.Count > 0) ? true : false;
         BtnStopSearchEnabled        = false;
         GroupingModeSelectorEnabled = true;
     }
 }
        /// <summary>
        /// Split group to smoll groups with equal value of given attribute
        /// Выполняем сортировку группы по заданному атрибуту файла
        /// Сравниваем файлы в группе по заданному атрибуту попарно первый со вторым второй с третьим и тд
        /// и при равенстве знвчений заданного атрибута добавляем файлы в новую группу
        /// при первом несовпадении файлов считаем формирование группы файлов совпадающих по заданному атрибуту
        /// завершенным.
        /// Если количество файлов в новой группе больше 1, новую группу добавляем в новый список групп
        /// </summary>
        /// <param name="attribute"></param>
        /// <param name="status"></param>
        /// <param name="cancelToken"></param>
        /// <returns></returns>
        public async Task <List <FilesGroup> > SplitByAttribute(GroupingAttribute attribute,
                                                                CancellationToken cancelToken, OperationStatus status)
        {
            Debug.Assert(this.Count >= 2, "SplitByAttributeMethod called on group with less then two files");

            IProgress <OperationStatus> progress = _progress;

            DataModel.SearchStatus oldStatusId = status.Id;

            status.Id = DataModel.SearchStatus.Sorting;
            progress.Report(status);
            await this.SortByAttribute(0, this.Count - 1, attribute.Attribute);

            status.Id = oldStatusId;
            var newGroupsCollection = new List <FilesGroup>();

            var newgroup = new FilesGroup(_progress);

            newgroup.Add(_files[0]);
            ++status.HandledItems;
            for (int i = 1; i < this.Count; i++)
            {
                int compareResult = await _files[i - 1].CompareTo(_files[i], attribute.Attribute);
                if (compareResult != 0)
                {
                    if (newgroup.Count > 1)
                    {
                        newGroupsCollection.Add(newgroup);
                    }
                    newgroup = new FilesGroup(_progress);
                }
                newgroup.Add(_files[i]);

                cancelToken.ThrowIfCancellationRequested();
                ++status.HandledItems;
                progress.Report(status);
            }

            if (newgroup.Count > 1)
            {
                newGroupsCollection.Add(newgroup);
            }
            return(newGroupsCollection);
        }