如何在Markup中设置blazor组件的datetime属性



如果我有一个带有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>

最新更新