public MainViewModel(DishWindow dishWindow, IngredientsWindow ingredientsWindow, PreparationWindow preparationWindow) { _dinner = new Dinner(); _dishWindow = dishWindow; _ingredientsWindow = ingredientsWindow; _preparationWindow = preparationWindow; _dishViewModel = (DishViewModel) _dishWindow.DataContext; _ingredientsViewModel = (IngredientsViewModel) _ingredientsWindow.DataContext; _preparationViewModel = (PreparationViewModel) _preparationWindow.DataContext; Starters = new ObservableCollection<Dish>(); Mains = new ObservableCollection<Dish>(); Desserts = new ObservableCollection<Dish>(); Menu = new ObservableCollection<Dish>(); _hideErrorTextTimer = new System.Timers.Timer(ErrorTextDisplayTime) {AutoReset = false}; _hideErrorTextTimer.Elapsed += (sender, args) => Application.Current.Dispatcher.Invoke(() => ErrorTextVisible = false); ShowPreparations = new DelegateCommand(o => { _preparationViewModel.Starter = _dinner.GetSelectedDish(DishType.Starter); _preparationViewModel.Main = _dinner.GetSelectedDish(DishType.Main); _preparationViewModel.Dessert = _dinner.GetSelectedDish(DishType.Dessert); _preparationWindow.Show(); }, o => Menu.Any()); ShowIngredients = new DelegateCommand(o => { _ingredientsViewModel.Ingredients = _dinner.AllIngredients; _ingredientsWindow.Show(); }, o => Menu.Any()); _dinner.MenuChanged += OnMenuChanged; _dinner.FilteredDishes += DinnerOnFilteredDishes; _dinner.ErrorGettingFilteredDishes += DinnerOnErrorGettingFilteredDishes; _dinner.DishesChanged += OnDishesChanged; _dinner.NumberOfGuestsChanged += OnNumberOfGuestsChanged; }