Следующее предназначено для сбитого с толку, объясняющего, как работает привязка данных в Blazor:
Использование связывания со свойством PetitionInput (<input bind="@PetitionInput" />
) по существу эквивалентно следующему:
<input value="@PetitionInput"
onchange="@((UIChangeEventArgs __e) => PetitionInput= __e.Value)" />
"При визуализации компонента значение элемента input берется из свойства PetitionInput. Когда пользователь вводит текстовое поле, вызывается событие onchange, а свойству PetitionInput устанавливается измененное значение. В принципе, bindсвязывает текущее значение выражения с атрибутом значения и обрабатывает изменения, используя зарегистрированный обработчик. "
Проще говоря, когда вы используете атрибут bind (bind =" @ PetitionInput "), Blazor генерирует код, подобныйthis:
<input value="@PetitionInput"
onchange="@((UIChangeEventArgs __e) => PetitionInput= __e.Value)" />
Это так называемое двустороннее связывание данных.Теперь, если вы добавляете обработчик события для события onkeydown, код выполняет то, для чего он предназначен:
void PetitionHandleKeyDown(UIKeyboardEventArgs arg) {
PetitionInput += _petition[_petitionCharStep];
_petitionCharStep++;
}
Когда страница отображается впервые, текстовое поле по умолчанию пустоеЗначение PetitionInput установлено в string.Empty:
public string PetitionInput { get; set; } = string.Empty;
Когда пользователь вводит текстовое поле, скажем, букву 'N', оно добавляется в свойство PetitionInput из-за двусторонней привязки(с использованием атрибута bind) и отображается в текстовом поле сразу после визуализации компонента размещения.Кроме того, код в методе PetitionHandleKeyDown добавляет букву «T» к свойству PetitionInput (при первом вводе), и, таким образом, строка «NT» отображается в текстовом поле сразу после визуализации компонента размещения.Конечно, способ предотвратить такое поведение (мы должны уважать желание спрашивающего) состоит в том, чтобы сделать то, что
Мистер Магу сделал выше.Простой и элегантный, отражающий понимание привязки данных и принципов работы Blazor.
Надеюсь, это поможет ... По крайней мере, я знаю, это помогло мне.