public MainViewModel(IUIVisualizerService visualizerService, IViewAwareStatusWindow window, IMessageBoxService messageBoxService, IHartCommunicationLiteEx hartCommunication, IVersionService versionService) { _synchronizationContext = SynchronizationContext.Current; _settingsViewModel = new SettingsViewModel(); _visualizerService = visualizerService; _messageBoxService = messageBoxService; _hartCommunication = hartCommunication; _versionService = versionService; _versionService.GetOnlineVersionResult += (sender, onlineVersion) => { if (onlineVersion != new Version()) { Settings.Default.LastUpdateCheck = DateTime.Now; } if (versionService.GetCurrentVersion() < onlineVersion) { _synchronizationContext.Send(obj => _visualizerService.ShowDialog("UpdateViewModel", new UpdateViewModel(_versionService)), null); } }; window.ViewLoaded += () => { if (Settings.Default.ShowOnStartup) { _visualizerService.ShowDialog("SettingsViewModel", _settingsViewModel); } CheckUpdates(_versionService); }; window.ViewWindowClosed += () => { Settings.Default.Save(); Application.Current.Shutdown(); }; ReadSettings(); DataTransferModel = DataTransferModel.GetInstance(); InitCommands(); }
/// <summary> /// This creates the WPF window from a key. /// </summary> /// <param name="key">Key</param> /// <param name="dataContext">DataContext (state) object</param> /// <param name="setOwner">True/False to set ownership to MainWindow</param> /// <param name="completedProc">Callback</param> /// <param name="isModal">True if this is a ShowDialog request</param> /// <returns>Success code</returns> private Window CreateWindow(string key, object dataContext, bool setOwner, EventHandler <UICompletedEventArgs> completedProc, bool isModal) { if (string.IsNullOrEmpty(key)) { throw new ArgumentNullException("key"); } Type winType; lock (_registeredWindows) { if (!_registeredWindows.TryGetValue(key, out winType)) { return(null); } } var win = (Window)Activator.CreateInstance(winType); if (dataContext is IViewStatusAwareInjectionAware) { IViewAwareStatus viewAwareStatus = ViewModelRepository.Instance.Resolver.Container.GetExport <IViewAwareStatus>().Value; viewAwareStatus.InjectContext((FrameworkElement)win); ((IViewStatusAwareInjectionAware)dataContext).InitialiseViewAwareService(viewAwareStatus); } if (dataContext is IViewStatusAwareWindowInjectionAware) { IViewAwareStatusWindow viewAwareStatusWindow = ViewModelRepository.Instance.Resolver.Container.GetExport <IViewAwareStatusWindow>().Value; viewAwareStatusWindow.InjectContext((FrameworkElement)win); ((IViewStatusAwareWindowInjectionAware)dataContext).InitialiseViewAwareWindowService(viewAwareStatusWindow); } win.DataContext = dataContext; if (setOwner) { win.Owner = Application.Current.MainWindow; } if (dataContext != null) { var bvm = dataContext as ViewModelBase; if (bvm != null) { if (isModal) { bvm.CloseRequest += ((EventHandler <CloseRequestEventArgs>)((s, e) => { try { win.DialogResult = e.Result; } catch (InvalidOperationException) { win.Close(); } })).MakeWeak(eh => bvm.CloseRequest -= eh); } else { bvm.CloseRequest += ((EventHandler <CloseRequestEventArgs>)((s, e) => win.Close())) .MakeWeak(eh => bvm.CloseRequest -= eh); } bvm.ActivateRequest += ((EventHandler <EventArgs>)((s, e) => win.Activate())) .MakeWeak(eh => bvm.ActivateRequest -= eh); } } win.Closed += (s, e) => { win.DataContext = null; if (completedProc != null) { completedProc(this, new UICompletedEventArgs() { State = dataContext, Result = (isModal) ? win.DialogResult : null }); } }; return(win); }