如何让Blazorise组件触发EditContext的OnFieldChanged事件?
解决Blazorise组件无法触发EditContext.OnFieldChanged的问题
你遇到的核心问题是Blazorise组件默认不会自动向EditContext通知字段变更,而原生Blazor Input组件内部会自动调用EditContext.NotifyFieldChanged。要解决这个问题,可以通过以下两种方式实现:
方式一:绑定到EditContext关联的模型属性
你的原生代码中,EditContext是基于libraryBook模型创建的,但Blazorise组件却绑定了独立变量description,EditContext无法追踪这个独立变量的变更。需要将绑定目标改为模型的属性:
Razor代码
<EditForm EditContext="EditContext"> <TextEdit @bind-Text="@libraryBook.Description" /> </EditForm>
C#代码(确保模型已初始化)
private LibraryBook libraryBook; private EditContext EditContext; protected override async Task OnInitializedAsync() { // 必须初始化模型实例,否则EditContext无法正常工作 libraryBook = new LibraryBook(); EditContext = new EditContext(libraryBook); EditContext.OnFieldChanged += EditContext_OnFieldChanged; } private void EditContext_OnFieldChanged(object sender, FieldChangedEventArgs e) { // 可通过FieldIdentifier判断具体是哪个字段变更 if (e.FieldIdentifier.FieldName == nameof(LibraryBook.Description)) { // 执行字段变更后的逻辑 } }
方式二:手动触发EditContext字段变更通知
如果因业务需求必须绑定独立变量,或者方式一不生效,可以手动在TextChanged事件中调用EditContext.NotifyFieldChanged:
Razor代码
<EditForm EditContext="EditContext"> <TextEdit Text="@description" TextChanged="(value) => { description = value; // 创建字段标识符并通知EditContext var fieldId = FieldIdentifier.Create(() => libraryBook.Description); EditContext.NotifyFieldChanged(fieldId); }" /> </EditForm>
这种方式主动告诉EditContext指定字段已变更,就能正常触发OnFieldChanged事件。
内容的提问来源于stack exchange,提问作者usefulcat
相关产品推荐
相关产品推荐

