Как привязать к отраженным переменным - PullRequest
0 голосов
/ 08 января 2020

Я работаю над таблицей, которая использует отражение, чтобы сделать таблицу из любого переданного ей класса, где все поля являются примитивами. Я хотел бы иметь возможность редактировать эти примитивы. EditableClass.razor просто создает строку, которая будет обрабатываться реальной таблицей на более позднем этапе, но эта строка должна иметь возможность редактировать поля внутри нее.

Текущий код, который у меня есть сейчас:

@using WbotV2.Data
@using System
@using System.Collections
@using System.Reflection
@typeparam TItem

    <tr>
        @if (Editable)
        {
            for (int i = 0; i < BindableData.Count; i++)
            {
                <td><input @bind="@Convert.ChangeType(BindableData[i], BindableData[i].GetType())"/></td>  
            }       
        }
        else
        {
            @foreach (var datum in Data)
            {
                <td>@datum</td>
            }
        }
        <td><button class="btn btn-success">Edit</button></td>
        <td>@ChildContent</td>
    </tr>


@code {
    [Parameter]
    public RenderFragment ChildContent { get; set; }

    [Parameter]
    public EventCallback<TItem> Delete { get; set; }

    [Parameter] 
    public TItem Item { get; set; }

    public List<object> BindableData = new List<object>();

    public List<string> Data;
    public bool Editable = true;


    protected override async Task OnInitializedAsync()
    {
        BindableData = GetWriteableVars(Item);
        Data = GetData(Item);
        foreach (var type in BindableData)
        {
            Console.WriteLine(type);
        }
    }

    public dynamic GetRealVar(object obj)
    {
        return Convert.ChangeType(obj, obj.GetType());
    }

    public List<object> GetWriteableVars<T>(T instance)
    {
        List<object> ret = new List<object>();
        FieldInfo[] infos = typeof(T).GetFields();
        foreach (FieldInfo info in infos)
        {
            ret.Add(info.GetValue(instance));
        }
        return ret;
    }

    public List<Type> GetWriteableVarsTypes<T>(T instance)
    {
        List<Type> ret = new List<Type>();
        FieldInfo[] infos = typeof(T).GetFields();
        foreach (FieldInfo info in infos)
        {
            ret.Add(info.GetType());
        }
        return ret;
    }

    public static List<string> GetData<T>(T instance)
    {
        List<string> ret = new List<string>();
        FieldInfo[] infos = typeof(T).GetFields();
        foreach (FieldInfo info in infos)
        {
            ret.Add(info.GetValue(instance).ToString());
        }
        return ret;
    }
}

Однако @bind генерирует все виды ошибок. Я получаю ошибку < cannot be applied to method group and system.type или the left-hand side of an assignment must be a variable, property or indexer. Я действительно хотел бы помочь в этом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...