Вход на сайт
Резюме для программиста
89957 просмотров
Перейти к просмотру всей ветки
в ответ AlexNek 31.03.22 17:38
Просто попробуйте как в этой статье создать новый WPF проект и добавить текст бокс с привязкой к модели по свойству с плавающей запятой. Там главное - поставить обновление источника в байндинге не дефолтное, а по изменению свойства. С дефолтным баг не воспроизводится
<TextBox
Text="{Binding Path=MyDouble, UpdateSourceTrigger=PropertyChanged}" />Класс главного окна - тут просто контекст данных устанавливаем
public MainWindow()
{
InitializeComponent();
DataContext = new ViewModel();
}Вот разметка окна - просто текст бокс кидаем и ставим байндинг
<Window
x:Class="WpfApp1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp1"
mc:Ignorable="d"
Title="MainWindow"
Height="450"
Width="800"
d:DataContext="{d:DesignInstance Type=local:ViewModel}">
<Grid>
<TextBox
Text="{Binding Path=MyDouble, UpdateSourceTrigger=PropertyChanged}" />
</Grid>
</Window>Ну и вью модель простая для привязки
public class ViewModel : INotifyPropertyChanged
{
#region INotifyPropertyChanged Members
[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
#endregion INotifyPropertyChanged Members
double _myDouble;
public double MyDouble
{
get => _myDouble;
set
{
_myDouble = value;
OnPropertyChanged();
}
}
}В версиях 4.0 и младше баг не воспроизводится. В старших - воспроизводится. Причём что в 4.х, что в 5.0.