public RecipeAddViewModel(IControllerFactory factory, IDishSubject subject, IngredientListViewModel ingredientsViewModel)
        {
            this.factory        = factory;
            this.recipe         = new RecipeAddDTO();
            this.MustSelectDish = true;

            this.SaveCommand   = new DelegateCommand(Save, CanSave);
            this.RemoveCommand = new DelegateCommand(
                () => Ingredients.Remove(IngredientPortion),
                obj => IngredientPortion != null);

            this.IngredientsViewModel = ingredientsViewModel;

            this.Dishes      = new ObservableCollection <DishDisplayDTO>();
            this.Ingredients = new ObservableCollection <IngredientPortion>();

            ingredientsViewModel.IngredientSelected += (s, e) =>
            {
                string ingredientName = e.Data.Name;
                if (!Ingredients.Any(ingredientPortion => ingredientPortion.Ingredient == ingredientName))
                {
                    Ingredients.Add(new IngredientPortion {
                        Ingredient = ingredientName, Portion = Portion
                    });
                }

                Portion = String.Empty;
            };

            subject.Subscribe(this);
            Update();
        }
        public UIElement GetAddView(IDishSubject dishSubject, IIngredientSubject ingredientSubject)
        {
            IngredientListViewModel ingredientsViewModel = new IngredientListViewModel(factory, ingredientSubject);
            RecipeAddViewModel      viewModel            = new RecipeAddViewModel(factory, dishSubject, ingredientsViewModel);
            RecipeAddView           view = new RecipeAddView(viewModel);

            viewModel.RecipeAdded += (s, ea) => OnAdd(ea.Data, viewModel);

            return(view);
        }
        public DishListViewModel(IControllerFactory factory, IDishSubject subject)
        {
            this.factory = factory;

            this.SelectCommand = new DelegateCommand(
                () => RaiseDishSelectedEvent(Dish),
                obj => Dish != null);

            this.Dishes = new ObservableCollection <DishDisplayDTO>();

            subject.Subscribe(this);
            Update();
        }