AddLanguageViewModel.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using LocalizationTool.Services;
  5. namespace LocalizationTool.ViewModels
  6. {
  7. /// <summary>新增语言窗口:从语言目录选择,排除已存在的语言。</summary>
  8. public class AddLanguageViewModel : ViewModelBase
  9. {
  10. private LanguageEntry _selected;
  11. public List<LanguageEntry> Languages { get; }
  12. public LanguageEntry Selected
  13. {
  14. get => _selected;
  15. set => Set(ref _selected, value);
  16. }
  17. public bool CanConfirm => Selected != null;
  18. /// <summary>请求关闭窗口(true = 确认)。</summary>
  19. public event Action<bool> RequestClose;
  20. public RelayCommand ConfirmCommand { get; }
  21. public RelayCommand CancelCommand { get; }
  22. public AddLanguageViewModel(IEnumerable<string> existingCodes)
  23. {
  24. var existing = new HashSet<string>(
  25. (existingCodes ?? Enumerable.Empty<string>()).Select(c => c.Trim()),
  26. System.StringComparer.OrdinalIgnoreCase);
  27. Languages = LanguageCatalog.All
  28. .Where(e => !existing.Contains(e.Code))
  29. .ToList();
  30. Selected = Languages.FirstOrDefault();
  31. ConfirmCommand = new RelayCommand(() =>
  32. {
  33. if (CanConfirm) RequestClose?.Invoke(true);
  34. });
  35. CancelCommand = new RelayCommand(() => RequestClose?.Invoke(false));
  36. }
  37. }
  38. }