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;
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("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
}
}