using MaterialDesignThemes.Wpf; using Prism.Commands; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Runtime.CompilerServices; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using Team.FFFeederService.Interfaces; using TeamAAS_VP; using TeamAAS_VP.Resources.Languages; namespace TeamAAS_VP.Controls { /// /// VibrationControl.xaml 的交互逻辑 /// public partial class VibrationControl : UserControl, INotifyPropertyChanged { public VibrationControl() { InitializeComponent(); this.DataContext = this; this.Loaded += VibrationControl_Loaded; } private async void VibrationControl_Loaded(object sender, RoutedEventArgs e) { if (Feeder != null && Feeder.IsConnected) { if (await Feeder.QueryLightStateAsync()) { LightKind = PackIconKind.LightbulbOutline; } else { LightKind = PackIconKind.LightbulbOnOutline; } } } #region 属性 public IVoiceCoilMotorFeeder Feeder { get;set; } private PackIconKind _LightKind= PackIconKind.LightbulbOnOutline; public PackIconKind LightKind { get { return _LightKind; } set { SetProperty(ref _LightKind,value); } } #endregion #region 命令 private DelegateCommand _ActionCommand; public DelegateCommand ActionCommand => _ActionCommand ?? (_ActionCommand = new DelegateCommand(ExecuteActionCommand)); #endregion #region 方法 /// /// 执行动作命令 /// async void ExecuteActionCommand(string action) { try { if (int.TryParse(action, out int index)) { if (Feeder == null) return; if (!Feeder.IsConnected) return; switch (index) { case -1: if (await Feeder.QueryLightStateAsync()) { await Feeder.CloseLightAsync(); //关闭光源 LightKind = PackIconKind.LightbulbOutline; } else { await Feeder.OpenLightAsync(); //打开光源 LightKind = PackIconKind.LightbulbOnOutline; } break; case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: await Feeder.StartAction(index); break; } } } catch (Exception ex) { LogHelper.WriteLogError(Lang.Feeder执行动作命令时出错, ex); } } #endregion #region 属性更改通知 /// /// Occurs when a property value changes. /// public event PropertyChangedEventHandler PropertyChanged; /// /// Checks if a property already matches a desired value. Sets the property and /// notifies listeners only when necessary. /// /// Type of the property. /// Reference to a property with both getter and setter. /// Desired value for the property. /// Name of the property used to notify listeners. This /// value is optional and can be provided automatically when invoked from compilers that /// support CallerMemberName. /// True if the value was changed, false if the existing value matched the /// desired value. protected virtual bool SetProperty(ref T storage, T value, [CallerMemberName] string propertyName = null) { if (EqualityComparer.Default.Equals(storage, value)) return false; storage = value; RaisePropertyChanged(propertyName); return true; } /// /// Checks if a property already matches a desired value. Sets the property and /// notifies listeners only when necessary. /// /// Type of the property. /// Reference to a property with both getter and setter. /// Desired value for the property. /// Name of the property used to notify listeners. This /// value is optional and can be provided automatically when invoked from compilers that /// support CallerMemberName. /// Action that is called after the property value has been changed. /// True if the value was changed, false if the existing value matched the /// desired value. protected virtual bool SetProperty(ref T storage, T value, Action onChanged, [CallerMemberName] string propertyName = null) { if (EqualityComparer.Default.Equals(storage, value)) return false; storage = value; onChanged?.Invoke(); RaisePropertyChanged(propertyName); return true; } /// /// Raises this object's PropertyChanged event. /// /// Name of the property used to notify listeners. This /// value is optional and can be provided automatically when invoked from compilers /// that support . protected void RaisePropertyChanged([CallerMemberName] string propertyName = null) { OnPropertyChanged(new PropertyChangedEventArgs(propertyName)); } /// /// Raises this object's PropertyChanged event. /// /// The PropertyChangedEventArgs protected virtual void OnPropertyChanged(PropertyChangedEventArgs args) { PropertyChanged?.Invoke(this, args); } #endregion } }