Содержание
В Blazor механизм привязки данных может применяться к любом атрибуту html-элемента. Для привязки данных используется директива @bind-. Привязка данных в Blazor позволяет связать свойства и поля компонента в программной части компонента с какими-либо атрибутами html-элементов в визуальной части.
Директива @bind-
Синтаксис директивы @bind- следующий:
@bind-[название_атрибута]
В качестве примера, ниже показана привязка свойства Message к значению элемента <input>:
<input @bind-value="Message" />
@code {
public string Message { get; set; }
}
Привязанное свойство или поле компонента Blazor обновляется, когда элемент <input> теряет фокус, то есть, фактически, обновление происходит в момент срабатывания события onchange. Убедиться в этом можно, используя следующий код:
@page "/attributes"
<input value="@Message" @onchange="@((ChangeEventArgs e) => Message = e.Value.ToString())" />
<p>Значение переменной: @Message</p>
@code {
public string Message { get; set; }
}
Более того, если попытаться привязать значение value у input к переменной Message и, одновременно, определить обработчик события onchange, то Visual Studio выдаст следующее исключение:
Таким образом, директива @bind просто-напросто избавляет нас от написания лишней логики привязки данных. Также следует отметить, что при привязке данных с помощью @bind производится преобразование типов. Для демонстрации этой возможности рассмотрим следующий пример:
@page "/bind"
<input @bind-value="Number" />
<p>Значение переменной: @Number</p>
@code {
public int Number { get; set; } = 123;
}
Здесь мы связали value и целочисленной свойство Number. Такая привязка вполне допустима и в запущенном приложении мы увидим:
Когда пользователь попробует присвоить элементу значение отличное от int, то мы не получим ошибку или аварийное завершение работы программы — Blazor просто присвоит элементу предыдущее значение. В этом можно убедиться, записав в input, например, значение 12,2.
Директива @bind:event
По умолчанию, в Blazor обновление привязанного свойства происходит при срабатывании события onchange html-элемента. Если мы хотим переопределить событие по которому будет осуществляться обновление данных, то необходимо использовать директиву @bind:event, которая имеет следующий синтаксис:
@bind:event="[событие_html_элемента]"
Например, сделаем так, чтобы значение свойства компонента менялось в момент ввода данных пользователем, а не при потере фокуса:
@page "/bind"
<input @bind="Message" @bind:event="oninput" />
<p>Значение переменной: @Message</p>
@code {
public string Message { get; set; } = "Привет";
}
Теперь обновление будет происходить по мере ввода текста пользователем.
Форматирование строк при привязке данных (@bind:format)
Blazor поддерживает форматирование при привязке данных. Для этого используется директива @bind:format, имеющая следующий синтаксис:
@bind:format="[стока_формата]"
Например:
<input @bind="startDate" @bind:format="dd MMM yyyy" />
<p>
startDate: @startDate
</p>
@code {
private DateTime startDate = new(2020, 1, 1);
}
В запущенном приложении мы увидим следующее:
Итого
Сегодня мы рассмотрели механизм привязки данных в Blazor. Привязка данных в Blazor осуществляется с использованием директив @bind, @bind:event и @bind:format. Обновление данных свойства или поля компонента по умолчанию происходит при срабатывании события onchange html-элемента, однако это поведение можно изменить, указав в директиве @bind:event необходимое нам событие.

