Вот моя 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.
.