diff --git a/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml b/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml
new file mode 100644
index 0000000..b3f53eb
--- /dev/null
+++ b/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml
@@ -0,0 +1,83 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ A
+ B
+ C
+
+
+
+
+
diff --git a/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml.cs b/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml.cs
new file mode 100644
index 0000000..fde13b7
--- /dev/null
+++ b/demo/Ursa.Demo/Dialogs/CustomDemoDialog.axaml.cs
@@ -0,0 +1,13 @@
+using Avalonia;
+using Avalonia.Controls;
+using Avalonia.Markup.Xaml;
+
+namespace Ursa.Demo.Dialogs;
+
+public partial class CustomDemoDialog : UserControl
+{
+ public CustomDemoDialog()
+ {
+ InitializeComponent();
+ }
+}
\ No newline at end of file
diff --git a/demo/Ursa.Demo/Dialogs/CustomDemoDialogViewModel.cs b/demo/Ursa.Demo/Dialogs/CustomDemoDialogViewModel.cs
new file mode 100644
index 0000000..55fdb55
--- /dev/null
+++ b/demo/Ursa.Demo/Dialogs/CustomDemoDialogViewModel.cs
@@ -0,0 +1,59 @@
+using System;
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+using System.Windows.Input;
+using CommunityToolkit.Mvvm.ComponentModel;
+using CommunityToolkit.Mvvm.Input;
+using Irihi.Avalonia.Shared.Contracts;
+using Ursa.Controls;
+
+namespace Ursa.Demo.Dialogs;
+
+public partial class CustomDemoDialogViewModel : ObservableObject, IDialogContext
+{
+ [ObservableProperty] private string? _city;
+ [ObservableProperty] private string? _department;
+ [ObservableProperty] private string? _owner;
+ [ObservableProperty] private string? _target;
+
+ public CustomDemoDialogViewModel()
+ {
+ Cities =
+ [
+ "Shanghai", "Beijing", "Hulunbuir", "Shenzhen", "Hangzhou", "Nanjing", "Chengdu", "Wuhan", "Chongqing",
+ "Suzhou", "Tianjin", "Xi'an", "Qingdao", "Dalian"
+ ];
+ OKCommand = new RelayCommand(OK);
+ CancelCommand = new RelayCommand(Cancel);
+ DialogCommand = new AsyncRelayCommand(ShowDialog);
+ }
+
+ public ObservableCollection Cities { get; set; }
+
+ public void Close()
+ {
+ RequestClose?.Invoke(this, null);
+ }
+
+ public event EventHandler