OptionSelectorViewModel.cs 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using Avalonia.Layout;
  2. using CommunityToolkit.Mvvm.ComponentModel;
  3. using CommunityToolkit.Mvvm.Input;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Collections.ObjectModel;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace InABox.Avalonia.Components;
  11. public partial class OptionSelectorViewModel : BasePopupViewModel<string>, IAlignedPopup
  12. {
  13. [ObservableProperty]
  14. private string _title = "Select Option";
  15. [ObservableProperty]
  16. private ObservableCollection<string> _options = new();
  17. public HorizontalAlignment HorizontalAlignment => HorizontalAlignment.Stretch;
  18. public VerticalAlignment VerticalAlignment => VerticalAlignment.Center;
  19. [RelayCommand]
  20. private void Cancel()
  21. {
  22. Close(null);
  23. }
  24. [RelayCommand]
  25. private void Select(string option)
  26. {
  27. Close(option);
  28. }
  29. }
  30. public static class OptionSelector
  31. {
  32. public static async Task<string?> Execute(string title, params string[] options)
  33. {
  34. return await Navigation.Popup<OptionSelectorViewModel, string?>(model =>
  35. {
  36. model.Title = title;
  37. model.Options = new(options);
  38. });
  39. }
  40. }