public AccessViewModel(IDialogRegister dialogRegister, IDialogLogin dialogLogin) { _dialogRegister = dialogRegister; _dialogLogin = dialogLogin; ActivateItem(_dialogLogin); }
public void ShowDialog(IDialogRegister dialog) { try { _dialogAction.ShowDialog(dialog); } catch (Exception ex) { _errorAction(new Exception($"Unexpected error thrown by {dialog.Name} dialog.", ex)); } }
public void ShowDialog(IDialogRegister dialog) { var windowEvents = new Subject<WindowEvent>(); var view = dialog.ViewFactory(); var viewModel = dialog.ViewModelFactory(windowEvents.AsObservable()); view.DataContext = viewModel; var window = CreateWindow(view, dialog.Owner ?? _owner, dialog); Observable.FromEventPattern<KeyEventHandler, KeyEventArgs>(h => window.KeyDown += h, h => window.KeyDown -= h) .Where(evp => evp.EventArgs.Key == Key.Escape) .Take(1) .Subscribe(e => { window.Close(); e.EventArgs.Handled = true; }); Observable.FromEventPattern(h => window.Closed += h, h => window.Closed -= h) .Take(1) .Subscribe(e => { windowEvents.OnNext(WindowEvent.Closed); }); if (!(viewModel is IDialogAware)) { window.Title = dialog.Name; } else { var dialogAware = viewModel as IDialogAware; dialogAware.CloseCommand = new DelegateCommand(window.Close); window.SetBinding(System.Windows.Window.TitleProperty, new Binding("Title") {Source = dialogAware}); } _showAction(window, false); }
private System.Windows.Window CreateWindow(FrameworkElement view, System.Windows.Window owner, IDialogRegister dialog = null) { var window = new MetroWindow() { Content = view, ResizeMode = dialog == null ? ResizeMode.NoResize : dialog.AllowResize ? ResizeMode.CanResize : ResizeMode.NoResize, Topmost = !Debugger.IsAttached, ShowInTaskbar = false, WindowStartupLocation = WindowStartupLocation.CenterOwner }; window.SetResourceReference(FrameworkElement.StyleProperty, "Window"); if (owner != null && owner.IsVisible) window.Owner = owner; if (dialog != null && dialog.Size.HasValue) { window.Width = dialog.Size.Value.Width; window.Height = dialog.Size.Value.Height; } else if (double.IsNaN(view.Width) && double.IsNaN(view.Height)) { window.SizeToContent = SizeToContent.WidthAndHeight; var behaviors = Interaction.GetBehaviors(window); if (behaviors != null) behaviors.Add(new WindowChromeSizeToContentBehavior()); } else if (double.IsNaN(view.Width)) { window.SizeToContent = SizeToContent.Width; window.Height = view.Height + SystemParameters.WindowCaptionHeight + SystemParameters.ResizeFrameHorizontalBorderHeight; } else if (double.IsNaN(view.Height)) { window.SizeToContent = SizeToContent.Height; window.Width = view.Width + SystemParameters.ResizeFrameHorizontalBorderHeight; } else { window.SizeToContent = SizeToContent.Manual; window.Width = view.Width + SystemParameters.ResizeFrameHorizontalBorderHeight; window.Height = view.Height + SystemParameters.WindowCaptionHeight + SystemParameters.ResizeFrameHorizontalBorderHeight; } return window; }