如果我有一个带有datetime属性的Blazor组件,我如何通过标记设置它?我刚收到一个错误。无法将"int"转换为"datetime?"。
public class MyComponent
{
[Parameter]
public DateTime? Value
{
get => _value;
set
{
if (_value == value) return;
_value = value;
ValueChanged.InvokeAsync(Value);
}
}
}
在剃须刀页面:
<MyComponent Value="2022/01/01"></MyComponent>
有没有办法以某种方式为属性创建隐式转换?
如果要将日期参数作为字符串传递,则必须将Value
属性类型更改为string?
,并在setter中将其解析为DateTime?
。(我不知道为什么会有人想这么做。(
MyComponent剃刀:
@code {
private DateTime? _value;
[Parameter]
public string? Value
{
get => _value?.ToString("yyyy/MM/dd");
set
{
if (value == null) _value = null;
if (DateTime.TryParse(value, out var result))
{
if (_value == result) return;
_value = result;
ValueChanged.InvokeAsync(Value);
}
}
}
[Parameter]
public EventCallback<string?> ValueChanged { get; set; }
}
用法:
<MyComponent Value="@("2022/01/01")"></MyComponent>
<MyComponent Value="new DateTime(2022/01/01)"></MyComponent>
或
<MyComponent Value="dateField"></MyComponent>
@code
{
private DateTime? dateField = new DateTime(2022/01/01);
}
或者绑定值,所以当它改变时,字段也会改变:
<MyComponent @bind-Value="dateField"></MyComponent>