问题描述
我有一个分页(一个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;
- 您在呼叫中省略了OnNext参数;像这样:
<Pagination />
- 或者由于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!