Blazor:可选地提供一个方法作为Parameter



我有分页(一个Blazor组件(,它使用一个";上一个";和一个";下一个";按钮这种分页是通用形式的,当我在第一页时;上一个";按钮,并且当我在最后一页时;下一个";按钮

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

<some html>
@code {
[Parameter]
public EventCallback OnNext { get; set; }
[Parameter]
public bool ShowNext { get; set; }
[Parameter]
public EventCallback OnPrevious { get; set; }
[Parameter]
public bool ShowPrevious { get; set; }
}

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

与其为每个按钮提供额外的布尔参数,我更愿意这样实现:

<some html>
@code {
[Parameter]
public EventCallback OnNext { get; set; }
private bool ShowNext => OnNext.HasDelegate;
[Parameter]
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)" />

选项1可以是锥形的,方法是在我的剃刀文件中放入if语句,呈现带有或不带有OnNext参数的分页组件。但我宁愿只制作一个分页组件,根据情况提供一个方法或默认的EventCallback;像这样:

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

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

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

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

感谢PeterMorris;这是正确的答案:
<Pagination OnNext="@(ShowNextButton ? MyNextMethod : default(Action))"

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

最新更新