将 属性 委托传递给 Blazor 组件给出 'does not take 1 argument' 错误

Passing property delegate into Blazor component giving 'does not take 1 argument' error

我正在尝试将 属性 作为委托传递给 Blazor 组件。但是,我收到 Delegate 'Func<Pen, int, stirng>' does not take 1 argument 错误。不确定正确的语法应该是什么。

这是组件:

@typeparam TItem

<div class="MarelAutoComplete">
    <div class="MarelAutoCompleteList">
        @foreach (var item in Data.Select(Property))
        {
            ...
        }
    </div>
</div>
@code {

    [Parameter]
    public List<TItem> Data { get; set; }

    [Parameter]
    public Func<TItem, string> Property { get; set; }
}

调用代码如下:

<MyComponent TItem="Pen"
             TValue="myVal"
             Data="Pens"
             Property="pen => pen.PenNumber" /> // Error On This Line.
@code {

   List<Pen> Pens { get; set; }
}

您报告的错误是 Delegate 'Func<Pen, int, string>' does not take 1 argumentProperty 被定义为 Func<TItem, string>

Func<TItem, string> Property 说我想要一个如下所示的函数:

string MyMethod(TItem item)

您的匿名函数是 pen => pen.PenNumber,属性 期望 pen.PenNumber 作为字符串。是吗?

这是您正在执行的操作的简化工作版本:

TextBox.razor

@typeparam TItem
<h3>@Value</h3>

@foreach (var item in Data.Select(this.Property))
{
 <div>@item</div>
}

@code {
    [Parameter] public string Value { get; set; } = "Bonjour";
    [Parameter] public Func<TItem, string> Property { get; set; }
    [Parameter] public List<TItem> Data { get; set; }
}

Index.razor

@page "/"
@using Blazor.Starter.Data

<div>
    <TextBox TItem="Model" Data="models" Property="item => item.Value"></TextBox>
</div>

@code {

    public string GetProperty(Model model)
    {
        return model.Value;
    }

    public List<Model> models => new List<Model>()
    {
        new Model() { Value = "Fred"},
        new Model() { Value = "Jon"},
        new Model() { Value = "Bob"},
     };


    public class Model
    {
        public string Value { get; set; }
    }
}

问题是一个简单的语法问题。这样定义输入函数时,输入变量需要用括号括起来。

它通过改变这个来工作:

Property="pen => pen.PenNumber" 

对此:

Property="(pen) => pen.PenNumber"