Blazor中如何为DynamicComponent动态渲染的组件传递运行时指定的回调方法
解决方案
首先修正JSON参数的匹配问题:你的MyButton组件文本参数名为LabelText,需要把JSON配置里的Label字段改为LabelText,否则普通参数无法正常绑定。
然后修改DynamicPage.razor中参数填充的逻辑,通过反射判断参数类型,如果是EventCallback类型就基于方法名创建对应回调实例:
foreach (var kvp in item.Parameters) { var paramName = kvp.Key; var jsonValue = ((JsonElement)kvp.Value).GetString(); // 先获取目标组件对应参数的类型 var paramProp = componentItem.Type.GetProperty(paramName); if (paramProp == null) continue; // 不存在的参数跳过 // 判断是否是无参EventCallback类型 if (paramProp.PropertyType == typeof(EventCallback)) { // 从当前页面查找对应名称的无参方法 var method = this.GetType().GetMethod(jsonValue, Type.EmptyTypes); if (method != null) { // 创建EventCallback实例 var callback = EventCallback.Factory.Create(this, method); componentItem.Parameters.Add(paramName, callback); } } else { // 普通类型参数直接赋值,其他类型可自行扩展转换逻辑 componentItem.Parameters.Add(paramName, jsonValue); } }
如果需要支持带参数的EventCallback<T>,扩展类型判断分支,调用EventCallback.Factory.Create的泛型重载即可。
内容的提问来源于stack exchange,提问作者bphua
相关产品推荐
相关产品推荐

