Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

Резюме для программиста

01.04.22 12:06
Re: Резюме для программиста
 
alex445 коренной житель
в ответ 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.

 

Перейти на