diff --git a/src/Ursa/Controls/Drawer/Drawer.cs b/src/Ursa/Controls/Drawer/Drawer.cs index ae9d52f..70a4374 100644 --- a/src/Ursa/Controls/Drawer/Drawer.cs +++ b/src/Ursa/Controls/Drawer/Drawer.cs @@ -1,4 +1,5 @@ -using Avalonia.Controls; +using Avalonia; +using Avalonia.Controls; using Ursa.Common; using Ursa.Controls.Options; @@ -6,11 +7,11 @@ namespace Ursa.Controls; public static class Drawer { - public static Task Show(TViewModel vm, string? hostId = null, DefaultDrawerOptions? options = null) + public static Task Show(TViewModel vm, string? hostId = null, DefaultDrawerOptions? options = null) where TView: Control, new() { var host = OverlayDialogManager.GetHost(hostId); - if (host is null) return Task.FromResult(default(DialogResult?)); + if (host is null) return Task.FromResult(default(DialogResult)); var drawer = new DefaultDrawerControl() { Content = new TView(), @@ -18,7 +19,39 @@ public static class Drawer }; ConfigureDefaultDrawer(drawer, options); host.AddDrawer(drawer); - return drawer.ShowAsync(); + return drawer.ShowAsync(); + } + + public static Task Show(Control control, object? vm, string? hostId = null, + DefaultDrawerOptions? options = null) + { + var host = OverlayDialogManager.GetHost(hostId); + if (host is null) return Task.FromResult(default(DialogResult)); + var drawer = new DefaultDrawerControl() + { + Content = control, + DataContext = vm, + }; + ConfigureDefaultDrawer(drawer, options); + host.AddDrawer(drawer); + return drawer.ShowAsync(); + } + + public static Task Show(object? vm, string? hostId = null, DefaultDrawerOptions? options = null) + { + var host = OverlayDialogManager.GetHost(hostId); + if (host is null) return Task.FromResult(default(DialogResult)); + var view = host.GetDataTemplate(vm)?.Build(vm); + if (view is null) view = new ContentControl() { Padding = new Thickness(24) }; + view.DataContext = vm; + var drawer = new DefaultDrawerControl() + { + Content = view, + DataContext = vm, + }; + ConfigureDefaultDrawer(drawer, options); + host.AddDrawer(drawer); + return drawer.ShowAsync(); } public static Task ShowCustom(TViewModel vm, string? hostId = null, CustomDrawerOptions? options = null) @@ -36,6 +69,38 @@ public static class Drawer return dialog.ShowAsync(); } + public static Task ShowCustom(Control control, object? vm, string? hostId = null, CustomDrawerOptions? options = null) + { + var host = OverlayDialogManager.GetHost(hostId); + if (host is null) return Task.FromResult(default(TResult)); + var dialog = new CustomDrawerControl() + { + Content = control, + DataContext = vm, + }; + ConfigureCustomDrawer(dialog, options); + host.AddDrawer(dialog); + return dialog.ShowAsync(); + } + + public static Task ShowCustom(object? vm, string? hostId = null, CustomDrawerOptions? options = null) + { + var host = OverlayDialogManager.GetHost(hostId); + if (host is null) return Task.FromResult(default(TResult)); + var view = host.GetDataTemplate(vm)?.Build(vm); + if (view is null) view = new ContentControl() { Padding = new Thickness(24) }; + view.DataContext = vm; + var dialog = new CustomDrawerControl() + { + Content = view, + DataContext = vm, + }; + ConfigureCustomDrawer(dialog, options); + host.AddDrawer(dialog); + return dialog.ShowAsync(); + } + + private static void ConfigureCustomDrawer(CustomDrawerControl drawer, CustomDrawerOptions? options) { options ??= CustomDrawerOptions.Default;