using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Data; namespace mdfinder { public class SizeConverter : IValueConverter { /// Suffix for size. private static readonly string[] SUFFIX = { "B", "KB", "MB", "GB", "TB", "PB", "EB" }; /// Converts a value. /// The value produced by the binding source. /// The type of the binding target property. /// The converter parameter to use. /// The culture to use in the converter. /// /// A converted value. If the method returns , the valid null value is /// used. /// /// /// Thanks to user deepee1 on stackoverflow for the implementation. /// https://stackoverflow.com/a/4975942/1210377. /// public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { var size = (long)value; if (size == 0) { return "0" + SUFFIX[0]; } int place = System.Convert.ToInt32(Math.Floor(Math.Log(size, 1024))); double num = Math.Round(size / Math.Pow(1024, place), 1); return (Math.Sign(size) * num).ToString() + SUFFIX[place]; } else { return string.Empty; } } /// Converts a value. /// The value that is produced by the binding target. /// The type to convert to. /// The converter parameter to use. /// The culture to use in the converter. /// /// A converted value. If the method returns , the valid null value is /// used. /// public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { throw new NotSupportedException(); } } }