В мире Xaml каждое число рассматривается как Double
. Вам нужно будет выполнить приведение / преобразование вручную, иначе может произойти неожиданное Это означает, что в вашей модели представления получите число как double?
вместо decimal?
, а затем приведите / преобразуйте его в decimal
соответствующим образом. Например:
public class ViewModel : BindableBase
{
public DelegateCommand<double?> ProcessAmount { get; set; }
public ViewModel()
{
ProcessAmount = new DelegateCommand<double?>(HandleProcessAmount, CanProcessAmount);
}
private bool CanProcessAmount(double? amount)
{
return amount.HasValue && amount.Value != 0;
}
private void HandleProcessAmount(double? amount)
{
decimal amountInDecimal = Convert.ToDecimal(amount.Value); // convert it to decimal
// do something with the amount
}
}
Хорошо, что в этом случае вычисление для номера типа double
проще, чем для номера типа decimal
. Но, думаю, это не то, что вы хотели.
Решение вашего вопроса - указать тип, явно равный Decimal
в xaml. Вам необходимо импортировать System mscorlib
, а затем присвоить System
Decimal
CommandParameter
.
xmlns:s="clr-namespace:System;assembly=mscorlib"
<Button Content="5"
VerticalAlignment="Center"
HorizontalAlignment="Center"
Command="{Binding ProcessAmount}"
FontSize="24"
Height="75"
Width="85">
<Button.CommandParameter>
<s:Decimal>5.00000</s:Decimal>
</Button.CommandParameter>
</Button>
Это исключает необходимость преобразования чисел на стороне виртуальной машины.