private async void Remove() { var category = SelectedCategoryInTree; bool hasChilds = category.AllProducts.Count > 0 || Db.Categories.ProductAndCategories.Any(x => x.CategoryId == category.Model.Id); if (hasChilds || category.ChildCategories.Count > 0) { var result = await View.MessageBox.ShowAsync( $"Вы действительно хотите удалить категорию \"{category.Title}\" вместе со всем содержимым?", "Удаление", MessageBoxButton.OKCancel, MessageBoxImage.Question).ConfigureAwait(false); if (result != MessageBoxResult.OK) { return; } } await AsyncHelper.ExecuteAtUI(() => { category.ParentCollection.Remove(category); CloseChildCategories(category); CloseCategory(category, EventArgs.Empty); }).ConfigureAwait(false); await Db.Categories.DeleteAsync(category.Model).ConfigureAwait(false); }
private async Task AddToResultsAsync(IEnumerable <Product> newProducts) { var goodProducts = new List <ProductVM>(); lock (Products) { foreach (var newProduct in newProducts) { _cts.Token.ThrowIfCancellationRequested(); bool isProductExist = Products.Any(x => x.Model.Id == newProduct.Id); if (!isProductExist) { goodProducts.Add(new ProductVM(newProduct)); } } } await AsyncHelper.ExecuteAtUI(() => { lock (Products) { Products.AddRange(goodProducts); } }).ConfigureAwait(false); }
public static async Task <MessageBoxResult> ShowAsync(string message, string caption, MessageBoxButton buttons, MessageBoxImage image = MessageBoxImage.None) { var result = MessageBoxResult.None; await AsyncHelper.ExecuteAtUI(() => { result = Show(message, caption, buttons, image); }).ConfigureAwait(false); return(result); }
private async Task SearchStartAsync() { if (!IsStarted) { CurrentSubchapterNumber = 0; CurrentSubchapterTitle = null; Status = null; ProductProcessingStatus = null; IsStarted = true; await AsyncHelper.RedirectToThreadPool(); var isClearLastResult = await IsNeedClearLastResultAsync().ConfigureAwait(false); if (isClearLastResult == true) { await AsyncHelper.ExecuteAtUI(() => Products.Clear()).ConfigureAwait(false); } else if (isClearLastResult is null) { IsStarted = false; return; } try { if (!await IsCookiesExistsAsync().ConfigureAwait(false)) { IsStarted = false; return; } _cts = new CancellationTokenSource(); if (IsLocalSearch) { await GetProductsFromDbAsync().ConfigureAwait(false); } else { await GetProductsAsync().ConfigureAwait(false); } IsStarted = false; } catch (OperationCanceledException) { } } else { IsStarted = false; _cts.Cancel(); } }
private async void AddProductToCategoryFromSearch() { bool additionSuccess = await ShowAddProductToCategoryDialogAsync(SelectedProductsFromSearch, true).ConfigureAwait(false); if (additionSuccess && IsDeleteFromCurrentPlace) { var productsToDelete = SelectedProductsFromSearch.ToList(); foreach (var productVm in productsToDelete) { _tempSearchColl?.Remove(productVm); await AsyncHelper.ExecuteAtUI(() => _searchColl.Remove(productVm)).ConfigureAwait(false); } } }
private async void AddProductToCategoryHandler() { bool additionSuccess = await ShowAddProductToCategoryDialogAsync(ProductManager.SelectedProducts).ConfigureAwait(false); if (additionSuccess && IsDeleteFromCurrentPlace) { var productsToDelete = ProductManager.SelectedProducts.ToList(); foreach (var productVm in productsToDelete) { SelectedCategory.AllProducts.Remove(productVm); await AsyncHelper.ExecuteAtUI(() => SelectedCategory.Products.Remove(productVm)) .ConfigureAwait(false); } await Db.Categories.DeleteProductsAsync(SelectedCategory.Model, productsToDelete.Select(p => p.Model).ToList()) .ConfigureAwait(false); } }
private async void RemoveCategory() { foreach (var selectedCategory in SelectedCategories) { bool hasChilds = selectedCategory.AllProducts.Count > 0 || Db.Categories.ProductAndCategories.Any(x => x.CategoryId == selectedCategory.Model.Id); if (hasChilds || selectedCategory.ChildCategories.Count > 0) { var result = await View.MessageBox.ShowAsync( $"Вы действительно хотите удалить категорию \"{selectedCategory.Title}\" вместе со всем содержимым?", "Удаление", MessageBoxButton.OKCancel, MessageBoxImage.Question).ConfigureAwait(false); if (result != MessageBoxResult.OK) { continue; } } await AsyncHelper.ExecuteAtUI(() => selectedCategory.ParentCollection.Remove(selectedCategory)) .ConfigureAwait(false); await Db.Categories.DeleteAsync(selectedCategory.Model).ConfigureAwait(false); } }
public static async Task AddProductToCategoryAsync(CategoryVM category, IEnumerable <ProductVM> products) { await Db.Categories.AddProductsAsync(category.Model, products.Select(p => p.Model).ToList()).ConfigureAwait(false); foreach (var productVm in products) { if (category.AllProducts.Any(p => p.Model.Id == productVm.Model.Id)) { continue; } var isGoodProduct = true; if (category.IsFilterSetted) { isGoodProduct = Filters.IsGoodProduct(productVm.Model, category.FiltersManagerVM.FiltersVM.Model); } if (isGoodProduct) { await AsyncHelper.ExecuteAtUI(() => category.Products.Add(productVm)).ConfigureAwait(false); } category.AllProducts.Add(productVm); } }
private async void LoadProducts(CategoryVM category) { if (category is null) { return; } category.IsLoading = true; await AsyncHelper.ExecuteAtUI(() => category.Products.Clear()).ConfigureAwait(false); var productsFromDb = await Db.Categories.GetAllProductsAsync(category.Model).ConfigureAwait(false); var productVmForDataGrid = new List <ProductVM>(); foreach (var product in productsFromDb) { ProductVM productVm; if (!_allProducts.ContainsKey(product.Id)) { productVm = new ProductVM(product); _allProducts.Add(product.Id, productVm); } else { productVm = _allProducts[product.Id]; } productVmForDataGrid.Add(productVm); } await AsyncHelper.ExecuteAtUI(() => category.Products.AddRange(productVmForDataGrid)).ConfigureAwait(false); category.AllProducts.Clear(); category.AllProducts.AddRange(category.Products); category.IsLoading = false; category.IsProductsLoaded = true; }