public Task ApplyFiltersFromUrlAsync(ICollection <FilterCategoryViewModel> filterCategory, ProductFiltersUrlModel urlData) { foreach (var category in filterCategory) { foreach (var filter in category.Filters) { var properties = urlData.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public); foreach (var prop in properties) { if (prop.Name == filter.Name && prop.Name != "MinPrice" && prop.Name != "MaxPrice" && prop.Name != "Page" && prop.Name != "OrderBy") { var val = this.GetPropertyValue(urlData, prop.Name) as string[]; if (val.Any(x => x == filter.Value)) { filter.IsChecked = true; break; } } } } } if (decimal.TryParse(urlData.MaxPrice, out decimal maxPrice) && decimal.TryParse(urlData.MinPrice, out decimal minPrice)) { string maxPriceString = maxPrice.ToString(); string minPriceString = minPrice.ToString(); var priceFilters = filterCategory.FirstOrDefault(x => x.ViewSubCategoryName == "Price"); priceFilters.Filters.FirstOrDefault(x => x.Name == "MinPrice").Value = minPriceString; priceFilters.Filters.FirstOrDefault(x => x.Name == "MaxPrice").Value = maxPriceString; } var orderByCategory = filterCategory.FirstOrDefault(x => x.ViewSubCategoryName == "Order By"); if (orderByCategory != null) { var orderByFilters = orderByCategory.Filters; var orderBy = orderByFilters.FirstOrDefault(x => x.Value == urlData.OrderBy); orderBy.IsChecked = true; } return(Task.CompletedTask); }
private object GetPropertyValue(ProductFiltersUrlModel urlData, string propName) { var prop = urlData.GetType().GetProperty(propName); return(prop.GetValue(urlData, null)); }