using System.Reactive.Disposables; using System.Threading.Tasks; using Avalonia; using Avalonia.Controls; using Avalonia.Controls.ApplicationLifetimes; using Avalonia.ReactiveUI; using DesertPaintCodex.ViewModels; using ReactiveUI; namespace DesertPaintCodex.Views { public class UserControlBase : ReactiveUserControl where T : ViewModelBase { public UserControlBase() { this.WhenActivated((disposables) => { ViewModel?.ShowMessageBoxDialog.RegisterHandler(ShowDialog).DisposeWith(disposables); }); } #region Dialog handlers protected async Task ShowDialog( InteractionContext interaction) where View : Window, new() { if (Application.Current.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) { View dialog = new() {DataContext = interaction.Input}; ReturnType result = await dialog.ShowDialog(desktop.MainWindow); interaction.SetOutput(result); } } #endregion } }