Eu tenho um parâmetro:
[Parameter]
public RateItemModel Value { get; set; } = default!;
Minha página de barbear tem:
<EditForm EditContext="EditContext" OnValidSubmit="HandleValidSubmitAsync" OnInvalidSubmit="HandleInvalidSubmitAsync" Context="editFormContext">
E durante a inicialização eu faço o seguinte:
EditContext = new EditContext(Value);
Preciso substituir OnParametersSetAsync()
e sempre que Value
for alterado, instanciar novamente EditContext
?
Atualizar:
Aqui está o caso de uso. Eu tenho uma lista de cartões de inscrição. Cada cartão de inscrição permite clicar para participar ou não. Quando o usuário clica, o cartão permanece ativo, mas o compromisso alterado deve ser gravado no banco de dados e o cartão precisa exibir o valor do compromisso alterado.
A solução fácil é escrever o novo valor em SignupCard.Commitment, mas isso é proibido. Então...
- O clique do usuário altera o valor de Model.Commitment e chama
OnClick
. - O OnClick cria um
Signup
objeto com aCommitment
propriedade definida para o novo valor. - O
EventCard
componente chamaValueChanged
a passagem desseSignup
objeto para a página da lista pai. - A página da lista possui um array atribuído
ListPage.Data
àDxListBox.Values
propriedade do DxListBox. - Ele executa uma cópia superficial desta lista para uma lista temporária var.
- A inscrição alterada é atribuída a
list[index]
essa lista temporária, substituindo o valor antigo. - Os dados também são atualizados no banco de dados.
- Esta lista é atribuída a 'ListPage.Data`
- A
DxListBox.Values
propriedade é assim alterada. Então agora atualizaSignupCard.Value
para todos os cartões da lista. - O
SignupCard
que deu início a tudo isso agora ganha um novo arquivoValue
. - Isto agora é aplicado ao "
ignupCard.Model
(que não deve mudar nada). - E acredito que também preciso recriar
EditContext
usando esse novo arquivoValue
.
Sim, você quer. Porque você não pode redefinir o contexto. Se você definir o contexto para um novo objeto, tudo
EditForm
[incluindo controles de edição] será reconstruído.No entanto, supondo que
RateItemModel
seja uma classe, ou seja, um objeto de referência, sua pergunta levanta vários problemas.Como você detecta se
Value
mudou? As alterações de referência são aceitáveis, mas e se você alterar o objeto fora do contexto de edição. Você substituiu os comparadores iguais para sua classe de dados e, em seguida, verificou a igualdadeOnParametersSet
?Por que mudaria
Value
e o componente pai forçaria um evento em cascata de renderização? Se os renderizadores pais, então seu componente de edição será porqueValue
é um objeto, então ele o renderiza porque não consegue detectar seValue
foi alterado ou não.Supondo que você possa detectar uma alteração, é necessário considerar dois casos:
Aqui está um MRE de demonstração que criei a partir de sua descrição. Fiz algumas suposições para preencher as lacunas e estou usando controles padrão em vez dos caros itens DX.
Ele usa um dicionário para rastrear os objetos de dados.
Provavelmente fornece uma visão diferente sobre como implementar o que você está tentando fazer. Há um problema se você editar um valor e depois ir para outro lugar, mas não vou mostrar como resolver isso até ter certeza de que meu MRE está bem próximo do seu caso de uso.
Meus objetos de dados:
O cartão"
E a página: