123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- using CommunityToolkit.Mvvm.ComponentModel;
- using CommunityToolkit.Mvvm.Input;
- using System.Collections.ObjectModel;
- namespace InABox.Avalonia.Dialogs;
- public partial class MessageDialogViewModel : BasePopupViewModel<MessageDialogResult>
- {
- [ObservableProperty]
- private string _message;
- public ObservableCollection<MessageDialogButton> Buttons { get; private set; } = new();
- public IEnumerable<MessageDialogButton> LeftButtons => Buttons.Where(x => x.Position == MessageDialogButtonPosition.Left);
- public IEnumerable<MessageDialogButton> RightButtons => Buttons.Where(x => x.Position == MessageDialogButtonPosition.Right);
- public MessageDialogViewModel()
- {
- Message = "";
- }
- [RelayCommand]
- private void ButtonClick(MessageDialogButton button)
- {
- button.Action(this, button);
- }
- public MessageDialogViewModel AddButton(MessageDialogButton button)
- {
- Buttons.Add(button);
- return this;
- }
- public MessageDialogViewModel AddOkButton(string content = "OK")
- {
- Buttons.Add(new MessageDialogButton(content, OKButton_Click, MessageDialogButtonPosition.Right));
- return this;
- }
- public MessageDialogViewModel AddCancelButton(string content = "Cancel")
- {
- Buttons.Add(new MessageDialogButton(content, CancelButton_Click, MessageDialogButtonPosition.Right));
- return this;
- }
- public MessageDialogViewModel AddYesButton(string content = "Yes")
- {
- Buttons.Add(new MessageDialogButton(content, YesButton_Click, MessageDialogButtonPosition.Right));
- return this;
- }
- public MessageDialogViewModel AddNoButton(string content = "No")
- {
- Buttons.Add(new MessageDialogButton(content, NoButton_Click, MessageDialogButtonPosition.Right));
- return this;
- }
- private void YesButton_Click(MessageDialogViewModel window, MessageDialogButton button)
- {
- window.Close(MessageDialogResult.Yes);
- }
- private void NoButton_Click(MessageDialogViewModel window, MessageDialogButton button)
- {
- window.Close(MessageDialogResult.No);
- }
- private void CancelButton_Click(MessageDialogViewModel window, MessageDialogButton button)
- {
- window.Close(MessageDialogResult.Cancel);
- }
- private void OKButton_Click(MessageDialogViewModel window, MessageDialogButton button)
- {
- window.Close(MessageDialogResult.OK);
- }
- #region Static Constructors
- public static MessageDialogViewModel New()
- {
- return new MessageDialogViewModel();
- }
- public static MessageDialogViewModel NewMessage(string message)
- {
- return new MessageDialogViewModel()
- .Message(message)
- .AddOkButton();
- }
- public static async Task ShowMessage(string message)
- {
- await NewMessage(message).Display();
- }
- public static MessageDialogViewModel NewOkCancel(string message)
- {
- return new MessageDialogViewModel()
- .Message(message)
- .AddOkButton()
- .AddCancelButton();
- }
-
- public static async Task<bool> ShowOkCancel(string message)
- {
- return await NewOkCancel(message).Display() == MessageDialogResult.OK;
- }
- public static MessageDialogViewModel NewYesNo(string message)
- {
- return new MessageDialogViewModel()
- .Message(message)
- .AddYesButton()
- .AddNoButton();
- }
- public static async Task<bool> ShowYesNo(string message)
- {
- return await NewYesNo(message)
- .Display() == MessageDialogResult.Yes;
- }
- public static MessageDialogViewModel NewYesNoCancel(string message)
- {
- return new MessageDialogViewModel()
- .Message(message)
- .AddYesButton()
- .AddNoButton()
- .AddCancelButton();
- }
- public static async Task<MessageDialogResult> ShowYesNoCancel(string message)
- {
- return await NewYesNoCancel(message).Display();
- }
- #endregion
- }
- public partial class MessageDialogButton : ObservableObject
- {
- public delegate void MessageDialogButtonDelegate(MessageDialogViewModel window, MessageDialogButton button);
- public MessageDialogButtonPosition Position { get; set; }
- [ObservableProperty]
- private string _content;
- public MessageDialogButtonDelegate Action { get; set; }
- public MessageDialogButton(string content, MessageDialogButtonDelegate action, MessageDialogButtonPosition position)
- {
- Content = content;
- Action = action;
- Position = position;
- }
- }
- public static class MessageDialogBuilder
- {
- public static MessageDialogViewModel Message(this MessageDialogViewModel window, string message)
- {
- window.Message = message;
- return window;
- }
- public static async Task<MessageDialogResult> Display(this MessageDialogViewModel window)
- {
- return await Navigation.Popup<MessageDialogViewModel, MessageDialogResult>(window, false);
- }
- }
|