public BestScoresPresenter(IPuzzleDomainModel domainModel, IBestScoresView bestScoresView) { // Сохраняем внедряемые ссылки на модель и представление Model = domainModel; View = bestScoresView; // Синхронизируем представление с текущим состоянием модели UpdateView(); }
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; }
// // Переопределенный метод 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(); }); }); }
public BestScoresWindow(IPuzzleDomainModel model) { InitializeComponent(); Model = model; }