using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Text;
using System.Threading.Tasks;
using Team.FFFeederService.Enums;
namespace Team.FFFeederService.Models
{
///
/// 单个序列动作
///
public class SingleSequenceAction : INotifyPropertyChanged
{
private ActionType _Type;
///
/// 动作
///
public ActionType Type
{
get { return _Type; }
set { SetProperty(ref _Type,value); }
}
private int _ShakeId;
///
/// 程序
///
public int ShakeId
{
get { return _ShakeId; }
set { SetProperty(ref _ShakeId, value); }
}
private DurationMode _DurationMode;
///
/// 持续模式
///
public DurationMode DurationMode
{
get { return _DurationMode; }
set {
if (value == DurationMode.震动比)
{
DurationValue = DurationValue > 100 ? 100 : DurationValue;
Format = "{}{0:N0} ms";
Max = 30000;
}
else
{
Format = "{}{0:N0} %";
Max = 100;
}
SetProperty(ref _DurationMode, value);
}
}
private int _DurationValue;
///
/// 持续时长
///
public int DurationValue
{
get { return _DurationValue; }
set { SetProperty(ref _DurationValue, value); }
}
private string _Format;
public string Format
{
get { return _Format; }
set { SetProperty(ref _Format, value); }
}
private int _Max;
public int Max
{
get { return _Max; }
set { SetProperty(ref _Max, value); }
}
#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
}
}