Example #1
0
 public BestScoresPresenter(IPuzzleDomainModel domainModel, IBestScoresView bestScoresView)
 {
     // Сохраняем внедряемые ссылки на модель и представление
     Model = domainModel;
     View  = bestScoresView;
     // Синхронизируем представление с текущим состоянием модели
     UpdateView();
 }
Example #2
0
        public PuzzleWindow(IPuzzleDomainModel model)
        {
            InitializeComponent();

            Model = model;

            TimerGame = new DispatcherTimer {
                Interval = TimeSpan.FromSeconds(1)
            };
            TimerGame.Tick += (s, e) => textBlockTimer.Text = (DateTime.Now - Model.Puzzle.StartTime).ToString(@"hh\:mm\:ss");
        }
 public PuzzlePresenter(IPuzzleDomainModel domainModel, IPuzzleView puzzleView)
 {
     // Сохраняем внедряемые ссылки на модель и представление
     Model = domainModel;
     View  = puzzleView;
     // Подписываемся на события представления
     View.NewGame    += OnNewGame;
     View.Timer      += OnTimer;
     View.Move       += OnMove;
     View.BestScores += OnBestScores;
 }
Example #4
0
        //
        // Переопределенный метод OnStartup выполняет здесь две задачи:
        //
        //    1. Splash Screen.
        //         Показывает splash screen, а только затем показывает главное окно приложения.
        //         Про реализацию splash screen:
        //         https://wpf.programmingpedia.net/en/tutorial/3948/creating-splash-screen-in-wpf
        //
        //    2. Является Application Root нашего приложения.
        //         Создает экземпляр модели — единственный на всё приложение.
        //
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            // Создаем окно splash screen, временно делаем его главным
            // окном приложения и показываем его пользователю
            var splashScreen = new SplashScreenWindow();

            MainWindow = splashScreen;
            splashScreen.Show();

            // Чтобы UI оставался отзывчивым, асинхронно делаем паузу
            // и потом переходим к показу настоящего главного окна
            Task.Factory.StartNew(() =>
            {
                // Делаем паузу
                System.Threading.Thread.Sleep(5000);

                // Создаем настоящее главное окно типа PuzzleWindow, делаем его главным окном
                // приложения и показываем его пользователю. Поскольку мы сейчас вне основного
                // UI-потока, то обращение к тому, что имеет отношение UI-потоку, должно быть
                // вызвано потокобезопасно. В WPF это делается при помощи методов Invoke или
                // BeginInvoke объекта Dispatcher, который как раз и дает доступ к UI-потоку.
                Dispatcher.Invoke(() =>
                {
                    // Создаем модель
                    Model = new PuzzleDomainModel();

                    // Создаем настоящее главное окно типа PuzzleWindow, делаем его
                    // главным окном приложения и показываем его пользователю
                    MainWindow = new PuzzleWindow {
                        DataContext = new PuzzleViewModel()
                    };
                    MainWindow.Show();

                    // Закрываем splash screen
                    splashScreen.Close();
                });
            });
        }
Example #5
0
        public BestScoresWindow(IPuzzleDomainModel model)
        {
            InitializeComponent();

            Model = model;
        }