首页 > 解决方案 > Blazor:绑定 OnChange 事件 - 可以使用 EventCallback.Factory.CreateBinder 吗?

问题描述

我是 Blazor 的新手,在设计组件时,我遇到了一个使用我不熟悉的绑定方法的示例。

他们使用 EventCallback.Factory.CreateBinder() 而不是相关 Microsoft 文档中详细说明如何绑定数据的绑定技术。

这是他们完成绑定的方式:

@onchange="EventCallback.Factory.CreateBinder<string>(
               this,
               value => CurrentValueAsString = value,
               CurrentValueAsString,
               null)"

但是我过去看到的方式涉及一个具有特定名称的方法,如“ValueChanged”作为事件回调来处理绑定。如此处所示。

使用 EventCallback.Factory.CreateBinder() 方法而不是 Microsoft 文档中概述的方法有什么缺点吗?

当我搜索 CreateBinder() 方法时,我看到它被标记为“仅供内部使用”。这是否意味着我不应该使用它?此处显示为“仅供内部使用”。

标签: eventsdata-bindingblazor2-way-object-databinding

解决方案


@onchange="EventCallback.Factory.CreateBinder<string>(
           this,
           value => CurrentValueAsString = value,
           CurrentValueAsString,
           null)"

这太熟练了......但有时可能比提供方法名称更好。上面的@onchange 指令属性的值与编译器在 BuildRenderTree 方法中生成的值非常相似。

但是我过去看到的方式涉及一个具有特定名称的方法,如“ValueChanged”作为事件回调来处理绑定。如此处所示。

在这里,您指的是父级与其子级之间的组件绑定。但是,上面带有@onchange 指令属性的代码片段与元素数据绑定有关...实际上它们基于相同的原理。如果将子组件绑定到其父组件的 MyValue 属性,如下所示:

<子@bind-Value="MyValue"/>

子组件中的以下内容:

[Parameter]
Public string Value {get;set;}
[Parameter]
Public EventCallback<string> ValueChanged {get;set;}

然后编译器将创建执行绑定的代码(双向数据绑定)。如果您查看该文件,您会注意到编译器生成的代码与用于元素数据绑定的代码几乎相同。

使用 EventCallback.Factory.CreateBinder() 方法而不是 Microsoft 文档中概述的方法有什么缺点吗?

我不这么认为...

当我搜索 CreateBinder() 方法时,我看到它被标记为“仅供内部使用”。这是否意味着我不应该使用它?

我们不应该做很多事情...

你应该通过模仿来学习……我已经看到 Blazor 团队的人在他们对 github 问题的评论中使用 CreateBinder……而不是世界末日。由你决定...


推荐阅读