Вот моя ViewModel:
public class ViewModelData : INotifyPropertyChanged
{
private decimal? myValue;
public decimal? MyValue
{
get { return myValue; }
set
{
myValue = value;
OnPropertyChanged(nameof(MyValue));
}
}
public event PropertyChangedEventHandler? PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
И вот мой TextBox:
<TextBox
Name = "MyValueBox"
Text = "{Binding MyValue, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment = "Center"
VerticalAlignment = "Top"
Width = "112"
Margin = "0,96,0,0"/>
Но когда я пытаюсь вставить, например, значение 1.0, я могу ввести 1, но позже не могу ввести ..
Вместо этого я могу написать text1.0 или 10, а затем переместить курсор после 1 и ввести . (между 1 и 0).
Почему? И как я могу это исправить?
@mm8 ну, но именно поэтому я буду скучать по двусторонней привязке, верно?
По умолчанию он по-прежнему связывается двусторонне. Если вы удалите UpdateSourceTrigger=PropertyChanged, свойство source будет установлено, когда TextBox потеряет фокус.





Установка UpdateSourceTrigger=PropertyChanged в привязке означает, что ваше исходное свойство будет устанавливаться при каждом нажатии клавиши. И вы не можете установить decimal? на значение «1». в С#.
Таким образом, вы можете удалить UpdateSourceTrigger=PropertyChanged, чтобы использовать поведение по умолчанию для установки свойства источника, как только фокус покидает TextBox.
Или вы можете попробовать обработать событие PreviewTextInput, как предложено здесь.
Спасибо чувак! ты, кажется, опытный. что вы можете предложить для реализации заполнителей и валидаторов в текстовом поле в wpf? (например, «введите здесь десятичное число..» и/или проверьте, является ли оно десятичным, является ли это письмом и т. д.). Родные элементы управления, кажется, отсутствуют.
Я бы посоветовал прочитать эту публикацию в блоге о проверке в WPF в качестве отправной точки.
Понимаю. Спасибо. А для заполнителя в текстовом поле? Можно добавить по наивности?
Удалите
UpdateSourceTrigger=PropertyChanged, так как вы не можете установитьdecimal?на1..