LightChannelListViewModel.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using Prism.Commands;
  2. using Prism.Mvvm;
  3. using Prism.Services.Dialogs;
  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. using System.Windows;
  11. using TeamAAS_VP.Interfaces;
  12. using TeamAAS_VP.Models;
  13. using TeamAAS_VP.Models.Lights;
  14. using TeamAAS_VP.Models.PLC;
  15. using TeamAAS_VP.Resources.Languages;
  16. namespace TeamAAS_VP.ViewModels.Product
  17. {
  18. public class LightChannelListViewModel : BindableBase, IDialogAware
  19. {
  20. private readonly IConfigService _configService;
  21. private ObservableCollection<ChannelConfigEx> _AllLightChannels;
  22. public ObservableCollection<ChannelConfigEx> AllLightChannels
  23. {
  24. get { return _AllLightChannels; }
  25. set { SetProperty(ref _AllLightChannels, value); }
  26. }
  27. private DelegateCommand _ConfirmCommand;
  28. public DelegateCommand ConfirmCommand =>
  29. _ConfirmCommand ?? (_ConfirmCommand = new DelegateCommand(ExecuteConfirmCommand));
  30. private DelegateCommand _CancelCommand;
  31. public DelegateCommand CancelCommand =>
  32. _CancelCommand ?? (_CancelCommand = new DelegateCommand(ExecuteCancelCommand));
  33. public LightChannelListViewModel(IConfigService configService)
  34. {
  35. _configService = configService;
  36. }
  37. void ExecuteConfirmCommand()
  38. {
  39. //获取所有选择的通道
  40. var selectedChannels = AllLightChannels.Where(c => c.IsSelected).ToArray();
  41. //将通道配置扩展转换为通道配置
  42. ChannelConfig[] Channels = selectedChannels.Select(c => c.ToChannelConfig()).ToArray();
  43. IDialogParameters parameters = new DialogParameters();
  44. parameters.Add("Channels", Channels);
  45. RequestClose?.Invoke(new DialogResult(ButtonResult.OK, parameters));
  46. }
  47. /// <summary>
  48. /// 取消按钮
  49. /// </summary>
  50. void ExecuteCancelCommand()
  51. {
  52. RequestClose?.Invoke(new DialogResult(ButtonResult.Cancel, null));
  53. }
  54. public string Title { get; set; } = Lang.添加机器人;
  55. public event Action<IDialogResult> RequestClose;
  56. public bool CanCloseDialog()
  57. {
  58. return true;
  59. }
  60. public void OnDialogClosed()
  61. {
  62. }
  63. public void OnDialogOpened(IDialogParameters parameters)
  64. {
  65. Title = Lang.选择要使用的光源通道;
  66. ChannelConfig[] channels=parameters.GetValue<ChannelConfig[]>("Channels");
  67. AllLightChannels =new ObservableCollection<ChannelConfigEx>();
  68. var allChanels = _configService.GetAllLightChannels();
  69. foreach (var item in allChanels)
  70. {
  71. AllLightChannels.Add(new ChannelConfigEx(item));
  72. }
  73. //设置已选择的通道
  74. foreach (var channel in channels)
  75. {
  76. var exist = AllLightChannels.FirstOrDefault(c => c.GlobalIndex == channel.GlobalIndex);
  77. if (exist != null)
  78. {
  79. exist.IsSelected = true;
  80. }
  81. }
  82. }
  83. }
  84. }