DP.UnitAdapter 1.0.0

dotnet add package DP.UnitAdapter --version 1.0.0                
NuGet\Install-Package DP.UnitAdapter -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="DP.UnitAdapter" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DP.UnitAdapter --version 1.0.0                
#r "nuget: DP.UnitAdapter, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install DP.UnitAdapter as a Cake Addin
#addin nuget:?package=DP.UnitAdapter&version=1.0.0

// Install DP.UnitAdapter as a Cake Tool
#tool nuget:?package=DP.UnitAdapter&version=1.0.0                

UnitAdapter

https://www.nuget.org/packages/UnitAdapter

Помогает выводить в UI или в отчетах значения физических величин в нужных единицах измерения. Например, когда приложение под капотом хранит массу в граммах, а пользователю необходимо ее показывать в различных единицах (килограммы, тонны).

Библиотека работает в связке с UnitConverter (https://www.nuget.org/packages/DP.UnitConverter/)

Позволяет для каждой физической величины, определенной в UnitConverter хранить и настраивать ряд параметров:

  • базовые единицы измерения
  • отображаемые единицы измерения
  • отображаемое кол-во знаков после запятой (общее и по каждой физ.величине)

Согласно этим настройкам форматирует числа в строковые представления с указанием единиц измерения, а также осуществляет обратное преобразование из строки, содержащей значение и единицы, в число, приведенное к базовым единицам измерения.

Пример использования

В своем приложении рекомендуется создать класс обертку для UnitAdapter, который будет производить инициализацию (определение базовых единиц и загрузка настроек пользователя).

internal static class AppUnitsProxy
{
    internal static void Initialize()
    {
        // TODO Актуализация базовых единиц
        // TODO Загрузка и установка пользовательских настроек
    }
}

Так же в этом же классе можно разместить обертки для функций UnitAdapter с учетом специфики приложения.

Например, ваше приложение использует в качестве идентификатора физической величины enum Quantity(Weight, Volume,...) (а в UnitAdapter идентификатор физ.величины - строковое имя на английском языке). Тогда обертка одного из методов UnitAdapter может выглядеть так:

internal static class AppUnitsProxy
{
    ...

    internal static double ConvertBaseToDisplay(long value, Quantity quantity)
    {
        // где ToCategoryName() - расширение, преобразующее enum в строковое имя физической величины
        return UnitAdapter.ConvertBaseToDisplay(value, quantity.ToCategoryName());
    }

    ...

}

Так же, для удобства можно создать расширения для функций UnitAdapter. Это позволит обращаться к ним следущим образом:

// преобразовать 42 из базовых единиц объема к отображаемым и отформатировать:
// - округлить до нужного знака (из настроек)
// - добавить единицы измерения (из настроек)

42.ToDisplayUnit(Quantity.Volume);

Для использования в XAML можно создать конвертеры. Ниже приводится конвертер только для массы, но можно создать и универсальный для любой физической величины (это потребует доставлять в конвертер данные о том, что это за физ.величина).

    public class MassValueConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value == null) return null;

            var cult = CultureInfo.CurrentCulture;

            var digitValue = AppUnitsProxy.LongToLong(value, cult);
            if (digitValue == null) return null;

            return AppUnitsProxy.ToDisplayUnit(
                digitValue,
                Quantity.Weight,
                new ToStringParameters
                {
                    Culture = cult,
                    SimpleZero = true,
                    AnywayPlus = parameter is string str && str == "ShowPlus"
                });
        }


        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var result = AppUnitsProxy.ToLong(
                value,
                CategoryInfo.Weight.BaseUnits,
                new ToNumberParameters
                {
                    Culture = CultureInfo.CurrentCulture,
                    AbsoluteValue = parameter?.ToString() != "NegativeValueAllowed"
                });

            return result.Ok ? result.Value : DependencyProperty.UnsetValue;
        }
    }
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 was computed.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.0 88 7/25/2024