在 MatBlazor

问题描述

我有一组两个 MatSelectItem 组件,代表一个项目及其环境。我有一个包含这些的简单数据结构:

         public static async Task<ProjectsDO> GetProjects(HttpClient client)
        {
            var projs = new ProjectsDO
            {
                Items = new List<Item>()
            };

            for (int i =0; i < 5; i++)
            {
                var envs = Enumerable.Range(0,5).Select(j => new Environments { Name = $"Proj {i} Env {j}" }).ToList();
                projs.Items.Add(new Item { Name = $"Proj {i}",Environments = envs });
            }

            return projs;
            //return await GetAsync<ProjectsDO>(client,"projects");
        }

选择项定义为:

<MatSelectItem Items="projItems" ValueChanged="(Item i) => OnProjectChanged(i)">
    <ItemTemplate>
        <span>@context?.Name</span>
    </ItemTemplate>
</MatSelectItem>

<MatSelectItem @bind-Value="selectedEnv" Items="selectedProject?.Environments ?? new List<Environments>()">
    <ItemTemplate>
        <span>@(context?.Name ?? "Null")</span>
    </ItemTemplate>
</MatSelectItem>

填写数据的代码很简单:

    private ProjectsDO projects;
    private List<Item> projItems= new List<Item>();
    private Item selectedProject;
    private Environments selectedEnv;


    protected override async Task OnInitializedAsync() => await ReadData();

    private async Task ReadData()
    {
        projects = await GetProjects(Http);
        projItems = projects.Items;
        Console.WriteLine($"In {nameof(ReadData)}");

    }

    private void OnProjectChanged(Item newProj)
    {
        selectedEnv = null;
        selectedProject = newProj;
    }

当我将项目选择更改为一个值时,我会在第二个选择中获得环境列表。当我再次更改它时,我得到了一个例外。我猜它不喜欢我将第二个(envs)所选项目设置为空。

执行此操作的正确方法是什么。似乎是一项简单的任务,但它正在踢我的......

我在 .net 5 正式版上运行,在 VS2019 最新预览版的 Win10 机器上

谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)