У меня несколько флажков, и я сохраняю решение пользователя в списке, а затем мне нужно отфильтровать список на основе решения пользователя. Дело в том, что как только я собираю решение пользователя и здесь, если (UserDecision.Count> 1), я сравниваю, сколько значений выбрал пользователь, если я сделаю это один раз, то все в порядке, но если я фильтрую свои статьи, а затем go обратно в фильтр и измените значения, затем он добавляет поверх него, поэтому, если я в первый раз выбрал два варианта, а затем вернулся и решил, что на самом деле хочу только один, список содержит 3 вместо одного.
public static List<int> UserDecision { get; set; } = new List<int>();
public bool FilterAllItems
{
set
{
_filterAllItems = value;
NotifyPropertyChanged();
if (FilterAllItems == true)
{
UserDecision.Add(_parentCategoryId = -1);
}
}
get => _filterAllItems;
}
public bool FilterBeginnerItems
{
set
{
_filterBeginnerItems = value;
NotifyPropertyChanged();
if (_filterBeginnerItems)
{
FilterAllItems = false;
UserDecision.Add(_parentCategoryId = 1);
}
}
get => _filterBeginnerItems;
}
public bool FilterIntermediateItems
{
set
{
_filterIntermediateItems = value;
NotifyPropertyChanged();
if (_filterIntermediateItems)
{
FilterAllItems = false;
UserDecision.Add(_parentCategoryId = 2);
}
}
get => _filterIntermediateItems;
}
private static List<Article> FindAllArticlesForPurchases(List<Article> allArticles)
{
foreach(var userDecision in UserDecision)
{
if (userDecision != -1)
{
if(UserDecision.Count > 1)
{
foreach (var categoryGroup in _allUserCategoryGroups)
{
var allGroupCategories = _allCategories.Where(m => m.CategoryGroupId == categoryGroup.Id && UserDecision.Contains(m.CategoryGroupId)).ToList();
foreach (var category in allGroupCategories)
{
var categoryArticles = _allArticlesForPurchase.Where(m => m.CategoryId == category.Id).ToList();
allArticles.AddRange(categoryArticles);
}
}
}
else
{
allArticles = _allArticlesForPurchase;
}
}
return allArticles;
}