public ReplacementItemViewModel(ReplacementItem replacementItem, Factories factories,
     IList<InsulinCircumstanceViewModel> allCircumstances, IEnumerable<MealNameViewModel> names,
     MealNameViewModel defaultName, Navigator navigator, Action save, Action<IList<PatternViewModel>> showAlternatives)
 {
     ReplacementItem = replacementItem;
     Func<Pattern, bool, PatternViewModel> createPatternViewModel = (pattern, hasAlternatives) =>
         new PatternViewModel(pattern, factories, allCircumstances: allCircumstances,
             hasAlternatives: hasAlternatives, names: names, defaultName: defaultName, navigator: navigator,
             save: save, showAlternatives: ShowAlternatives);
     Pattern = createPatternViewModel(replacementItem.Pattern, replacementItem.Alternatives.Any());
     Alternatives = replacementItem.Alternatives
         .Select(pattern => createPatternViewModel(pattern, false))
         .ToList();
     this.showAlternatives = showAlternatives;
 }
 public PatternViewModel(Pattern pattern, Factories factories,
     IList<InsulinCircumstanceViewModel> allCircumstances, bool hasAlternatives,
     IEnumerable<MealNameViewModel> names, MealNameViewModel defaultName, Navigator navigator, Action save,
     Action showAlternatives)
 {
     Pattern = pattern;
     Match = new MealItemViewModel(pattern.Match, factories);
     From = new MealViewModel(pattern.From, factories);
     From.Names = names;
     From.DefaultName = defaultName;
     Insulin = new InsulinViewModel(pattern.Insulin, factories, allCircumstances: allCircumstances);
     Before = new SugarViewModel(pattern.Before, factories);
     After = pattern.After
         .Select(sugar => new SugarViewModel(sugar, factories))
         .ToList();
     For = new MealItemViewModel(pattern.For, factories);
     HasAlternatives = hasAlternatives;
     this.navigator = navigator;
     this.save = save;
     this.showAlternatives = showAlternatives;
 }
 private void MakeDefaultName()
 {
     var defaultEntities = factories.DefaultEntities;
     var model = defaultEntities.MealName;
     defaultName = new MealNameViewModel(model, factories);
 }
 private void LoadNames()
 {
     var models = factories.MealNames;
     var unsortedViewModels = new ObservableCollection<MealNameViewModel>();
     foreach (var model in models)
     {
         var viewModel = new MealNameViewModel(model, factories);
         unsortedViewModels.Add(viewModel);
     }
     if (sortNames)
     {
         var sortedViewModels = unsortedViewModels.OrderBy(mealName => mealName.Name);
         names = new ObservableCollection<MealNameViewModel>();
         foreach (var viewModel in sortedViewModels)
         {
             names.Add(viewModel);
         }
     }
     else
     {
         names = unsortedViewModels;
     }
 }
 private void SetName(MealNameViewModel value)
 {
     Meal.NameId = value.Id;
     isNameCached = false;
     OnPropertyChanged("Name");
     OnPropertyChanged("VisibleWhenIsNewerAndHasName");
     OnPropertyChanged("VisibleWhenIsNewerAndHasNoName");
 }