为什么这个UWP绑定到十进制属性不能正常工作?

时间:2018-05-21 16:16:19

标签: c# uwp

我有一个名为TG的小数属性

public class Dados_Pessoa : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    public decimal TG { get; set; }
    // ...
}

public class Pessoa : INotifyPropertyChanged
{
    public Pessoa Propriedades { get; set; }
    // ...
}

我穿上了XAML:

<TextBox Header="TG" HorizontalAlignment="Left"  Margin="145,416,0,0" VerticalAlignment="Top" Width="224"
         Text="{Binding Path=Pessoa.Propriedades.TG, Mode=TwoWay}"
/>

当我更改TextBox值并移动到其他字段时,Visual Studio 2017输出中会出现此错误:

  

错误:无法将目标值保存到源。   BindingExpression:Path =&#39; Pessoa.Propriedades.TG&#39;   的DataItem =&#39; Entidades.Formularios.FormFichaCadastro&#39 ;;目标元素是   &#39; Windows.UI.Xaml.Controls.TextBox&#39; (名称=&#39;空&#39);目标属性是   &#39;文本&#39; (键入&#39; String&#39;)。

如果我将decimal更改为double,则可以正常工作。

我想使用decimal来提高数字的精确度。

为什么会出现这种情况以及如何解决此问题?

1 个答案:

答案 0 :(得分:2)

我通过为这些字段创建一个转换器来解决它,我将它绑定到十进制数据类型。

public class DecimalConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, string language)
    {
        return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, string language)
    {            
        Decimal.TryParse((string)value, out decimal result);
        return result;
    }
}

然后我宣布了

<Page.Resources>
    <local:DecimalConverter x:Key="DecimalConverter" />
</Page.Resources>

并使用:

<TextBox Header="TG" HorizontalAlignment="Left"  Margin="145,416,0,0" VerticalAlignment="Top" Width="224"
         Text="{Binding Path=Pessoa.Propriedades.TG, Mode=TwoWay, Converter={StaticResource DecimalConverter}}"
         />