Files
BrightSharp.Toolkit/BrightSharp.NET/BrightSharp.NET/Converters/IntToValueConverter.cs
Vitali Semianiaka 81af2d3c8c .net copy
2021-04-14 16:26:56 +03:00

61 lines
1.9 KiB
C#

using System;
using System.Collections;
using System.Globalization;
using System.Windows.Data;
namespace BrightSharp.Converters
{
public class IntToValueConverter : IValueConverter
{
public ulong? TrueValueInt { get; set; } = null;
public ulong? FalseValueInt { get; set; } = 0;
public object TrueValue { get; set; } = true;
public object FalseValue { get; set; } = false;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (value == null)
{
value = false;
}
if (value is string valueStr)
{
value = valueStr.Length > 0;
}
if (value is bool valueBool)
{
value = valueBool ? 1 : 0;
}
if (value is ICollection valueCol)
{
value = valueCol.Count;
}
if (value is Enum en)
{
value = System.Convert.ToInt32(en);
}
if (ulong.TryParse(value.ToString(), out ulong valueLong))
{
// Exact match for false
if (FalseValueInt.HasValue && FalseValueInt == valueLong) return FalseValue;
// Exact match for true
if (TrueValueInt.HasValue && TrueValueInt == valueLong) return TrueValue;
// Any value for false
if (!FalseValueInt.HasValue) return FalseValue;
// Any value for true
if (!TrueValueInt.HasValue) return TrueValue;
}
return TrueValue;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// Convert with potential lose exact value match
return Equals(value, TrueValue) ? TrueValueInt : FalseValueInt;
}
}
}