Вход на сайт
Резюме для программиста
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.