将 MudBlazor 小吃店选项 Action<SnackbarOptions> 作为函数参数传递

Posted

技术标签:

【中文标题】将 MudBlazor 小吃店选项 Action<SnackbarOptions> 作为函数参数传递【英文标题】:Passing MudBlazor snackbar options Action<SnackbarOptions> as function parameter 【发布时间】:2021-08-14 10:27:26 【问题描述】:

我定义了一个名为 snackbarOptions 的 Action 委托,因此我可以在添加快餐栏时使用它,而不是在 Snackbar.Add() 函数调用中声明它

Action<SnackbarOptions> snackbarOptions = (options) =>

            options.RequireInteraction = true;
            options.Action = "UKLONI DUPLIKAT";
            options.ActionColor = Color.Error;
            options.ActionVariant = Variant.Filled;
            options.Onclick = async snackbar =>
            
                await DeleteDependency(readStep, readDependency);
            ;
 ;

现在每当我想添加小吃店时,我只需传递 options 参数。 add 函数本身就是函数的参数。

duplicatesValidation.CheckForDuplicates((x, y, z) => Snackbar.Add("Message", MudBlazor.Severity.Warning, snackbarOptions));

这很好,但是,当我尝试将 snackbarOptions 作为函数参数传递时,我可以在 CheckForDuplicates() 中调用 Snackbar.Add > 函数我得到一个对象引用错误

duplicatesValidation.CheckForDuplicates(snackbarOptions);

编辑: 所以总结一下: 这行得通:

public void CheckForDuplicates(Action<string, Severity, Action<SnackbarOptions>> SnackBarAdd) 

...

打电话-

duplicatesValidation.CheckForDuplicates((x, y, z) => Snackbar.Add("Message", MudBlazor.Severity.Warning, snackbarOptions))

这不是:

public bool CheckForDuplicates(Action<SnackbarOptions> options)

...

打电话-

duplicatesValidation.CheckForDuplicates(snackbarOptions)

编辑 2: 未处理的异常渲染组件:对象引用未设置为对象的实例。 ... EditDependenciesDialog.razor.cs:line 188 该行代码:duplicatesValidation.CheckForDuplicates(duplicatesSnackbarOptions) DuplicatesValidation.cs:line 35 该行代码:Snackbar.Add("x", Severity.Warning, options);

【问题讨论】:

你能用那个例外更新原始帖子吗?还要确保您使用的是 snackbarOptions 委托而不是 options 委托参数名称。 【参考方案1】:

考虑使用local function 来避免丢失对象引用。

当您在运行时创建和存储委托时,您创建的委托可能在您调用它时未被分配。

当使用本地方法时,它是预编译的,可以在其范围内的任何时间和任何地方引用。

void snackbarOptions(Options options)

        options.RequireInteraction = true;
        options.Action = "UKLONI DUPLIKAT";
        options.ActionColor = Color.Error;
        options.ActionVariant = Variant.Filled;
        options.Onclick = async snackbar =>
        
            await DeleteDependency(readStep, readDependency);
        ;
 

【讨论】:

以上是关于将 MudBlazor 小吃店选项 Action<SnackbarOptions> 作为函数参数传递的主要内容,如果未能解决你的问题,请参考以下文章

更改 MudBlazor 图表的外观

在 MudBlazor 中添加新图标

如何更改小吃店的背景颜色?

Mudblazor - 在拖放区域内单击

MudBlazor WASM 项目在启动时挂起

如何检测 MudBlazor 中表格行的双击?