Почему эта привязка UWP к десятичному свойству не работает должным образом? - PullRequest
0 голосов
/ 21 мая 2018

У меня есть десятичное свойство с именем 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 = 'Pessoa.Propriedades.TG' DataItem = 'Entidades.Formularios.FormFichaCadastro';целевой элемент - «Windows.UI.Xaml.Controls.TextBox» (Name = 'null');Целевым свойством является «Текст» (тип «Строка»).

Если я изменю decimal на double, он будет работать нормально, как и ожидалось.

Я хочу использоватьdecimal для большей точности чисел.

Почему это поведение и как это исправить?

1 Ответ

0 голосов
/ 21 мая 2018

Я решил это, создав конвертер для этих полей, которые я привязываю к десятичному типу данных.

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}}"
         />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...