Skip to content

Instantly share code, notes, and snippets.

@SchreinerK
Created March 23, 2020 10:52
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SchreinerK/53671d504d303b6eccf0564472fa6715 to your computer and use it in GitHub Desktop.
Save SchreinerK/53671d504d303b6eccf0564472fa6715 to your computer and use it in GitHub Desktop.
DoubleCompareConverter
using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;
namespace Converter
{
public class DoubleCompareConverter : IValueConverter
{
private static readonly SizeConverter SizeConverter = new SizeConverter();
public static readonly DoubleCompareConverter LessThen = new DoubleCompareConverter("<");
public static readonly DoubleCompareConverter GreaterThen = new DoubleCompareConverter(">");
public static readonly DoubleCompareConverter LessThenOrEqual = new DoubleCompareConverter("<=");
public static readonly DoubleCompareConverter GreaterThenOrEqual = new DoubleCompareConverter(">=");
public static readonly DoubleCompareConverter Equal = new DoubleCompareConverter("==");
public static readonly DoubleCompareConverter NotEqual = new DoubleCompareConverter("!=");
public static readonly DoubleCompareConverter Between = new DoubleCompareConverter("{min,max}");
private readonly string _operator;
private DoubleCompareConverter(string @operator)
{
_operator = @operator;
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var doubleValue = (double)System.Convert.ChangeType(value, TypeCode.Double);
switch (_operator)
{
case "{min,max}":
{
var range = (Size)SizeConverter.ConvertFrom(parameter);
return doubleValue >= range.Width && doubleValue < range.Height;
}
}
var doubleParameter = (double)System.Convert.ChangeType(parameter, TypeCode.Double);
switch (_operator)
{
case "<": return doubleValue < doubleParameter;
case "<=": return doubleValue <= doubleParameter;
case ">": return doubleValue > doubleParameter;
case ">=": return doubleValue >= doubleParameter;
case "==": return doubleValue == doubleParameter;
case "!=": return doubleValue != doubleParameter;
default: throw new NotSupportedException($"Operator '{_operator}' is not supported in {nameof(DoubleCompareConverter)}.");
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException($"ConvertBack is not supported in {nameof(DoubleCompareConverter)}.");
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment