private void applyNewChallengeFiltering(ChallengeViewFilter viewfilter, CompletedBehaviour completedBehaviour)

        {
            if (!isInitialized)
            {
                return;
            }
            if (backupList == null)
            {
                backupList = new List<ChallengeView>();
            }
            Application.Current.Dispatcher.Invoke(
             () =>
                 {
                     //restore original list
                     if (backupList.Count > 0 && ChallengeViews.Count < backupList.Count)
                     {
                         challengeViews.Clear();
                         foreach (var item in backupList)
                         {
                             challengeViews.Add(item);
                         }
                     }

                     //fill backup list with all items
                     backupList.Clear();
                     foreach (var item in challengeViews)
                     {
                         backupList.Add(item);
                     }
                     var visibleViews = viewfilter.calculateVisibleViews(backupList);

                     //remove non matching items
                     challengeViews.Clear();
                     foreach (var item in backupList)
                     {
                         if (completedBehaviour == CompletedBehaviour.HIDE && item.IsDone)
                         {
                             continue;
                         }
                         if (visibleViews.Contains(item.Id))
                         {
                             challengeViews.Add(item);
                         }
                     }
                     if (completedBehaviour == CompletedBehaviour.SORT_TO_END)
                     {
                         doAutoSort();
                     }
                 });
        }
  public void changeCompletedBehaviour(CompletedBehaviour newBehaviour)
  {
      completedBehaviour = newBehaviour;
 
      var challengeFilter = new RegexFilter(filterText);
      applyNewChallengeFiltering(challengeFilter, newBehaviour);
      if (newBehaviour == CompletedBehaviour.SORT_TO_END)
      {
          doAutoSort();
      }
  }