public YoutubeViewModel(YoutubeModel model) { this.model = model; //dinamically link the properties of the model through the viewmodel //only works if the property names are the same. model.PropertyChanged += delegate(object sender, PropertyChangedEventArgs e) { this.GetType() .GetProperties() .FirstOrDefault((pi) => pi.Name == e.PropertyName) .SetValue(this, sender.GetType() .GetProperties() .FirstOrDefault((pi) => pi.Name == e.PropertyName) .GetValue(sender)); }; model.DownloadFinished += delegate(object sender, EventArgs e) { if (this.Model_DownloadFinished != null) Model_DownloadFinished(this, EventArgs.Empty); }; YoutubeDownloadVideoCommand = new DelegateCommand(param => { try { model.DownloadVideo(); } catch { } }); YoutubeUrlTextChangedCommand = new DelegateCommand(param => { try { model.GetVideoQualityOptions(); } catch { } }); TwitcherWindowCommand = new DelegateCommand(param => { OnTwitcherWindowCommandInvoked(); }); }
private void App_Startup(object sender, EventArgs e) { _model = new TwitcherModel(); _viewModel = new TwitcherViewModel(_model); _viewModel.ExitApplication += delegate (object twitcherViewModelSender, EventArgs twitcherViewModelEventArgs) { Shutdown(); }; _viewModel.YoutubeWindowCommandInvoked += delegate (object twitcherViewModelSender, EventArgs twitcherViewModelEventArgs) { _view.Hide(); youtubeModel = new YoutubeModel(); youtubeViewModel = new YoutubeViewModel(youtubeModel); youtubeWindow = new YoutubeWindow(); youtubeWindow.DataContext = youtubeViewModel; youtubeViewModel.TwitcherCommandInvoked += delegate (object youtubeViewModelSender, EventArgs youtubeViewModelEventArgs) { youtubeWindow.Close(); _view.Show(); }; youtubeViewModel.Model_DownloadFinished += delegate (object youtubeViewModelSender, EventArgs youtubeViewModelEventArgs) { MessageBox.Show("Download finished!", "Youtube video download", MessageBoxButton.OK); }; youtubeWindow.Show(); }; _view = new MainWindow(); _view.DataContext = _viewModel; _view.Show(); }