Ejemplo n.º 1
0
        public void RemoveSubCategories(IList list)
        {
            var itemsToDelete         = new List <Item>();
            var subCategoriesToDelete = list.Cast <SubCategory>().ToList();

            foreach (var subCategory in subCategoriesToDelete)
            {
                itemsToDelete.AddRange(
                    _shop.Items.Where(
                        x =>
                        x.CategoryId == SelectedCategoryIndex &&
                        x.SubCategoryId == SubCategories.IndexOf(subCategory)
                        )
                    );
            }

            _shop.Items.RemoveRange(itemsToDelete);

            #region MoveItems

            var index = -1;

            for (int i = 0; i < _shop.Items.Count; i++)
            {
                if (_shop.Items[i].CategoryId == SelectedCategoryIndex)
                {
                    index++;

                    int subCat = _shop.Items[i].SubCategoryId;
                    int j      = i;

                    for (; j < _shop.Items.Count; j++)
                    {
                        if (subCat == _shop.Items[j].SubCategoryId)
                        {
                            while (_shop.Items[j].SubCategoryId > index)
                            {
                                _shop.Items[j].SubCategoryId--;
                            }
                        }
                        else
                        {
                            break;
                        }
                    }

                    i = j - 1;
                }
            }

            #endregion

            _subCategories.RemoveRange(subCategoriesToDelete);

            NotifyOfPropertyChange(nameof(SubCategories));
            NotifyOfPropertyChange(nameof(Items));
        }