public IObservable <T> Open <T>(DialogModel <T> dialogModel) { var contextType = dialogModel.GetType(); var windowType = _dialogProvider.GetWindowType(contextType); return(Dispatcher.UIThread.InvokeAsync(() => { var topWindow = GetTopWindow(); var dialogWindow = (Window)Activator.CreateInstance(windowType); dialogWindow.DataContext = dialogModel; // HACK: https://github.com/AvaloniaUI/Avalonia/issues/2774 if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { CenterDialog(dialogWindow, topWindow); } return dialogWindow.ShowDialog(topWindow); }) .ToObservable() .SelectMany(_ => dialogModel.GetResult())); }