我有一个名为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
来提高数字的精确度。
为什么会出现这种情况以及如何解决此问题?
答案 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}}"
/>