using System; namespace RosettaUI { public class CastMinMaxBinder : ConvertBinder, MinMax> { public CastMinMaxBinder(IBinder> binder) : base(binder) { } protected override MinMax GetFromParent(MinMax parent) => CastFunc(parent); protected override MinMax SetToParent(MinMax parent, MinMax value) => CastToParentFunc(parent, value); #region static private static readonly Func, MinMax> CastFunc; private static readonly Func, MinMax, MinMax> CastToParentFunc; static CastMinMaxBinder() { var valueCastFunc = CastBinder.CastFunc; CastFunc = minMaxFrom => MinMax.Create(valueCastFunc(minMaxFrom.min), valueCastFunc(minMaxFrom.max)); var valueCastToParentFunc = CastBinder.CastToParentFunc; CastToParentFunc = (minMaxFrom, minMaxTo) => { minMaxFrom.min = valueCastToParentFunc(minMaxFrom.min, minMaxTo.min); minMaxFrom.max = valueCastToParentFunc(minMaxFrom.max, minMaxTo.max); return minMaxFrom; }; } #endregion } }