我需要圍繞mudblazor組件構建一些包裝器
所以可以說我有基本的例子:
<MudSelect T="int" @bind-Value="@model.dict1" For="@(() => @model.dict1)" AnchorOrigin="Origin.BottomCenter">
<MudSelectItem T="int" Value="1">1</MudSelectItem>
<MudSelectItem T="int" Value="2">2</MudSelectItem>
</MudSelect>
所以現在我想圍繞這個做一些包裝
<DictMudSelectComponent T="int" @bind-Value="@model.dict1" For="@(() => model.dict1)" TableName="test" AnchorOrigin="Origin.BottomCenter"></DictMudSelectComponent>
所以基于引數 TableName 我想在選擇串列中呈現不同的專案
現在我有:
DictMudSelectComponent.razor
@typeparam T
<MudSelect T="@T" @bind-Value="@Value" For="()=>For()" @attributes=AllOtherAttributes>
<MudSelectItem T="int" Value="1">1</MudSelectItem>
<MudSelectItem T="int" Value="2">2</MudSelectItem>
<MudSelectItem T="int" Value="3">3</MudSelectItem>
@code {
private Func<T> _for ;
[Parameter]
public Func<T> For
{
get => _for;
set
{
if (_for == value)
return;
_for = value;
}
}
private T _value ;
[Parameter]
public T Value
{
get => _value;
set => _value = value;
}
[Parameter]
public string TableName { get; set; } = "";
[Parameter(CaptureUnmatchedValues = true)]
public Dictionary<string, object> AllOtherAttributes { get; set; } = new();
}
但即使這樣也行不通 - 為什么?它編譯得很好,但在渲染時我得到了
Unhandled exception rendering component: Unable to set property 'AnchorOrigin' on object of type 'MudBlazor.MudSelect`1[[System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'. The error was: Specified cast is not valid.
System.InvalidOperationException: Unable to set property 'AnchorOrigin' on object of type 'MudBlazor.MudSelect`1[[System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]]'. The error was: Specified cast is not valid.
---> System.InvalidCastException: Specified cast is not valid.
at Microsoft.AspNetCore.Components.Reflection.PropertySetter.CallPropertySetter[MudSelect`1,Origin](Action`2 setter, Object target, Object value)
at Microsoft.AspNetCore.Components.Reflection.PropertySetter.SetValue(Object target, Object value)
at Microsoft.AspNetCore.Components.Reflection.ComponentProperties.<SetProperties>g__SetProperty|3_0(Object target, PropertySetter writer, String parameterName, Object value)
--- End of inner exception stack trace ---
at Microsoft.AspNetCore.Components.Reflection.ComponentProperties.<SetProperties>g__SetProperty|3_0(Object target, PropertySetter writer, String parameterName, Object value)
at Microsoft.AspNetCore.Components.Reflection.ComponentProperties.SetProperties(ParameterView& parameters, Object target)
at Microsoft.AspNetCore.Components.ParameterView.SetParameterProperties(Object target)
at Microsoft.AspNetCore.Components.ComponentBase.SetParametersAsync(ParameterView parameters)
at MudBlazor.MudBaseInput`1[[System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].<>n__1(ParameterView parameters)
at MudBlazor.MudBaseInput`1.<SetParametersAsync>d__177[[System.Int32, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].MoveNext()
我在這里錯過了什么?謝謝并恭祝安康
uj5u.com熱心網友回復:
好的,所以第一個問題是它需要
<MudSelect @bind-Value="@Value" For="@For" >
并在@code
private Expression<Func<TypeParam>>? _for;
[Parameter]
public Expression<Func<TypeParam>> For
{
get => _for!;
set
{
if (_for == value)
return;
_for = value;
}
}
然后它運行沒有錯誤,但我無法更改值 - 它永遠保持在 0 /默認值 - 為什么?我現在 1/2/3 無法選擇這個硬編碼 - 總是回到 0/默認值有什么建議嗎?雷格士
編輯好的第二個問題是
[Parameter]
public T? Value
{
get => _value;
set
{
if (!Equals(value, _value))
{
_value = value;
if (ValueChanged.HasDelegate)
ValueChanged.InvokeAsync(_value);
}
}
}
這必須檢查是否相等,因為如果不是,那么問題是 MudSelect 正在觸發引數上的 Setter,然后呼叫回呼,然后再次呼叫引數上的 Setter。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/511215.html
標籤:。网仿制药西装外套泥泞的
下一篇:在when上使用泛型時型別不匹配
