FileLoadViewModel.cs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. using Avalonia;
  2. using Avalonia.Controls;
  3. using Avalonia.Controls.ApplicationLifetimes;
  4. using Avalonia.Platform.Storage;
  5. using CommunityToolkit.Mvvm.Input;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Diagnostics.CodeAnalysis;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Input;
  13. namespace IViewModel.ViewModels
  14. {
  15. public sealed class FileLoadViewModel:DisplayViewModelBase
  16. {
  17. private FileLoadViewModel() : base()
  18. {
  19. Content = typeof(Views.LoadConfigView);
  20. Title = nameof(LanguageValueViewModel.MenuLoadConfig);
  21. }
  22. static FileLoadViewModel()
  23. {
  24. }
  25. public override bool ShowTop => true;
  26. public override string IconKey => nameof(IconResourceValueViewModel.LoadConfigGeometry);
  27. public static FileLoadViewModel Instance { get; } = new FileLoadViewModel();
  28. public override bool AppendSeparator => false;
  29. public override string MenuKey => nameof(LanguageValueViewModel.MenuLoadConfig);
  30. public override string MenuParentKey => nameof(LanguageValueViewModel.MenuFile);
  31. public override string OKContent => nameof(LanguageValueViewModel.Confirm);
  32. public override bool CanResize => false;
  33. public override double Height => 320;
  34. public override double Width => 620;
  35. private string filter = "*";
  36. public override void InitData()
  37. {
  38. base.InitData();
  39. LoadFileAction = null;
  40. }
  41. public string Filter
  42. {
  43. get => filter;
  44. set
  45. {
  46. if (string.IsNullOrEmpty(value))
  47. {
  48. filter = "*";
  49. }
  50. else filter = value;
  51. }
  52. }
  53. public ICommand SelectFileCommand => new RelayCommand<string?>(SelectFile);
  54. [AllowNull]
  55. public Action<string> LoadFileAction { get; set; }
  56. private async void SelectFile(string? p)
  57. {
  58. if (Application.Current?.ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop)
  59. {
  60. var folder = await TopLevel.GetTopLevel(desktop.MainWindow)!.StorageProvider.OpenFilePickerAsync(new Avalonia.Platform.Storage.FilePickerOpenOptions()
  61. {
  62. AllowMultiple = false,
  63. Title = p == null ? "" : Application.Current?.FindResource(p) + "",
  64. FileTypeFilter = new FilePickerFileType[]
  65. {
  66. new FilePickerFileType($"{(p ==null ?"": Application.Current?.FindResource(p) + "")}"){ Patterns = new []{"*."+Filter } }
  67. }
  68. });
  69. if (folder != null && folder.Count > 0)
  70. {
  71. LoadFileAction?.Invoke(folder.First().Path.LocalPath);
  72. }
  73. }
  74. }
  75. }
  76. }