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();
        }
Exemple #2
0
        /// <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);
        }