Meu requisito é ter uma entrada de texto onde os usuários possam inserir texto, mas para o qual o valor também possa ser definido de outra forma (por exemplo, por meio de um botão). Eu uso o .Net 7 em um projeto de servidor blazor. Criei a seguinte UI simples para reproduzir um problema que tenho em uma construção mais complexa:
Código da navalha:
Text Input:
<input type="text" @bind-Value=Value @bind-Value:event="oninput" />
<br />
<button class="btn btn-primary" @onclick="IncrementCounter">Increment Counter and set Value </button>
<br />
Current Value: @Value
<br />
Current Counter Value: @_counter
Código C#:
@code {
private int _counter = 1000;
private string? Value { get; set; }
private void IncrementCounter()
{
_counter++;
Value = _counter.ToString();
}
}
Quando clico no botão, o valor na entrada de texto é definido conforme o esperado. Ou seja, é definido com o valor atual do contador e o contador é incrementado. Quando insiro algo na entrada de texto, o valor é mostrado abaixo do botão ("Valor Atual"). Porém, agora o botão não atualiza mais o conteúdo da entrada de texto. O texto simples de @Value
still mostra que a Value
propriedade está definida conforme o esperado. A ligação da entrada de texto à Value
propriedade ainda funciona, mas não o contrário. Qualquer idéia de como resolver isso é muito bem-vinda.
Tentei:
- Implemento
INotifyPropertyChanged
para aValue
propriedade. - Ligue
StateHasChanged
dentro doIncrementCounter()
. - Ligue para
StateHasChanged
dentro daValue
propriedade. - Ligue
StateHasChanged
através de outro botão. - Outro exemplo em que a entrada de texto estava em um componente com
Value
um arquivoParameter
. Neste exemplo também implementei um arquivoValueChanged EventCallback
.
Nada funcionou.
Desculpe, eu estava desesperado.
Você precisa usar
@bind-value
('v' minúsculo) ou@bind
sozinho.Violino Blazor
Como complemento à resposta do @RBee, você pode eliminar o código de conversão de texto e vincular diretamente ao contador.
O compilador Razor implementará o código de conversão necessário nos bastidores ao criar a funcionalidade de ligação na classe de componente C# gerada.