Blazor:可选地提供一种方法作为参数

问题描述

我有一个分页一个Blazor组件),它使用“上一个”和“下一个”按钮。此分页采用通用形式,当我在第一页上时,我不想显示上一页”按钮,当我在最后一页上时,我不想显示下一页”按钮。>

我当前的解决方案是这样工作的,html的构造方式并不重要:

<some html>

@code {
    [P@R_502_6460@meter]
    public EventCallback OnNext { get; set; }
    [P@R_502_6460@meter]
    public bool ShowNext { get; set; }
    [P@R_502_6460@meter]
    public EventCallback OnPrevIoUs { get; set; }
    [P@R_502_6460@meter]
    public bool ShowPrevIoUs { get; set; }
}

在我的html中,我将检查是否需要显示它(使用布尔值),如果需要显示它。

我宁愿像这样实现它,而不是为每个按钮提供额外的布尔参数:

<some html>

@code {
    [P@R_502_6460@meter]
    public EventCallback OnNext { get; set; }
    private bool ShowNext => OnNext.HasDelegate;
    [P@R_502_6460@meter]
    public EventCallback OnPrevIoUs { get; set; }
    private bool ShowPrevIoUs => OnPrevIoUs.HasDelegate;
}

注意,因为PrevIoUs和Next是相同的,所以我将在其余的代码示例中仅使用Next

在两种情况下,值ShowNext都将为false;

  1. 您在呼叫中省略了OnNext参数;像这样:<Pagination />
  2. 或者由于EventCallback不能为null,请提供认值;像这样:<Pagination OnNext="default(EventCallback)" />

通过将if语句放在带有或不带有OnNext参数的渲染文件中的Pasination组件中,可以将选项1变成圆锥形。但是我宁愿只制作1个分页组件,该组件将根据情况提供一个方法认的EventCallback;像这样:

<Pagination OnNext="@(ShowNextButton ? MyNextMethod : default(EventCallback))"

但是,这是不允许的,因为Method与EventCallback的类型不同。

现在,我知道在KISS下您只需添加2个额外的参数(在当前解决方案中;请参见第一个代码示例);任何人都可以更轻松地理解它。但这主要是因为对我的问题的回答(如果可能的话)并不容易。否则,可选地定义参数的值是我经常使用的标准设计模式。

有人知道我是否可以选择提供方法认的EventCallback作为参数。

解决方法

感谢PeterMorris;这是正确的答案:

<Pagination OnNext="@(ShowNextButton ? MyNextMethod : default(Action))"

default(Action)与我提供的方法类型相同,它也是一个没有委托的EventCallback!