DP.UnitAdapter
1.0.0
dotnet add package DP.UnitAdapter --version 1.0.0
NuGet\Install-Package DP.UnitAdapter -Version 1.0.0
<PackageReference Include="DP.UnitAdapter" Version="1.0.0" />
paket add DP.UnitAdapter --version 1.0.0
#r "nuget: DP.UnitAdapter, 1.0.0"
// 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 | Versions 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. |
-
.NETStandard 2.0
- DP.UnitConverter (>= 1.0.0.7)
- System.Text.Json (>= 8.0.4)
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 |