RunningStatusToBooleanConverter.cs 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. using SWRIS.Enums;
  2. using System;
  3. using System.Globalization;
  4. using System.Windows.Data;
  5. namespace SWRIS.Converters
  6. {
  7. public class RunningStatusToBooleanConverter : IValueConverter
  8. {
  9. public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
  10. {
  11. if (value == null || parameter == null) { return false; }
  12. if (value is RunningStatus valueStatus && Enum.TryParse(parameter.ToString(), true, out RunningStatus parameterStatus))
  13. {
  14. return GetRunningStatus(valueStatus) == parameterStatus;
  15. }
  16. return false;
  17. }
  18. public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
  19. {
  20. if (!(value is bool boolValue) || parameter == null)
  21. return RunningStatus.Stopped;
  22. if (!Enum.TryParse(parameter.ToString(), true, out RunningStatus targetStatus))
  23. return RunningStatus.Stopped;
  24. if (boolValue)
  25. {
  26. return targetStatus;
  27. }
  28. return RunningStatus.Stopped;
  29. }
  30. private RunningStatus GetRunningStatus(RunningStatus runningStatus)
  31. {
  32. // 优先级:TemporalNormal > SpatialNormal > Stopped
  33. if (runningStatus.HasFlag(RunningStatus.TemporalNormal))
  34. return RunningStatus.TemporalNormal;
  35. if (runningStatus.HasFlag(RunningStatus.SpatialNormal))
  36. return RunningStatus.SpatialNormal;
  37. return RunningStatus.Stopped;
  38. }
  39. }
  40. }