Exemplo n.º 1
0
        private async Task <TViewModel> HandleCreateWindow <TUserControl, TViewModel>(DXWindow window, bool isModal = false) where TUserControl : UserControl where TViewModel : IViewModel
        {
            var model = AppCore.Instance.ObjectProvider.GetInstance <TViewModel>();

            await model.Initialize();

            //injaect via DI
            model.Host = window;

            window.DataContext = null;
            window.DataContext = model;

            window.Closing += (sender, e) =>
            {
                var win       = (DXWindow)sender;
                var todispose = win.DataContext as IDisposable;
                todispose?.Dispose();
                _windowsRegistry.Remove(win);
            };

            window.Show();
            window.Activate();
            window.Topmost = true;
            window.Topmost = false;
            window.Focus();

            _windowsRegistry.Add(window);

            return(model);
        }
        private static void OpenViewInDialog(View view, View parent)
        {
            var container = new DXWindow
            {
                Width                 = 800,
                Height                = 500,
                ShowInTaskbar         = true,
                Title                 = view.GetText() ?? string.Empty,
                WindowStartupLocation = WindowStartupLocation.CenterScreen,
                Content               = view.GetControl()
            };

            if (parent != null)
            {
                container.ShowIcon    = false;
                container.WindowState = WindowState.Normal;
                container.WindowStyle = WindowStyle.ToolWindow;

                // Закрытие диалога по нажатию на Escape
                container.PreviewKeyDown += (s, e) =>
                {
                    if (e.Key == Key.Escape)
                    {
                        container.Close();
                    }
                };
            }
            else
            {
                container.ShowIcon    = true;
                container.WindowState = WindowState.Maximized;
                container.WindowStyle = WindowStyle.SingleBorderWindow;
                container.Icon        = ImageRepository.GetImage(view.GetImage());
            }

            var closingHandling = false;
            var closeHandling   = false;

            view.OnClosing +=
                (c, a) =>
                TryExecuteBlock(ref closingHandling, () => a.IsCancel = (a.IsCancel == true) || !CloseView(view));
            view.OnClosed     += (c, a) => TryExecuteBlock(ref closeHandling, container.Close);
            container.Closing +=
                (c, a) => TryExecuteBlock(ref closeHandling, () => a.Cancel = a.Cancel || !view.Close());

            var gotFocusHandling = false;

            view.OnGotFocus    += (c, a) => TryExecuteBlock(ref gotFocusHandling, () => container.Focus());
            container.GotFocus +=
                (s, e) => TryExecuteBlock(ref gotFocusHandling, () => view.InvokeScript(view.OnGotFocus));

            var lostFocusHandling = false;

            container.LostFocus +=
                (s, e) => TryExecuteBlock(ref lostFocusHandling, () => view.InvokeScript(view.OnLostFocus));

            view.OnTextChanged += (c, a) => container.Title = a.Value;

            container.ShowDialog();
        }