【问题标题】:Is there a way for an array to hold blazor components?有没有办法让数组保存 blazor 组件?
【发布时间】:2021-04-09 09:04:31
【问题描述】:

我目前设置的剃须刀文件如下所示:

 @switch (currentStep)
        {
            case 0:
                <Component1 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />
                break;
            case 1:
                <Component2 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward" />
                break;
            case 2:
                <Component3 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"/>
                break;
            case 3:
                <Component3/>
                break;
            default:
                <p>Some error message</p>
                break;
        }
        </div>`
    @code {
        private int currentStep = 0;
        private void MoveForward()
        {
            if (currentStep < 3) currentStep += 1;
        }
        private void MoveBackward()
        {
            if (currentStep > 0) currentStep -= 1;
        }
    }

我在每个组件内增加“currentStep”,使用 moveforward / movebackwards 作为回调来显示下一个组件。我想知道,我是否可以创建一个仅包含所有组件的数组,而不是 switch 语句,然后调用该数组?像下面这样的?

    <@steps[currentStep]>
@code{
    private __[] steps = new String[]
    {
        <component1 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />
        <component2 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />
        <component3 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />
        <component4 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />
    }
}

如果可能的话,我只是不确定数组应该具有哪种类型,以及如何创建该类型。

任何帮助将不胜感激谢谢!

【问题讨论】:

标签: c# razor blazor


【解决方案1】:

另一种做法是将组件标记存储在RenderFragment的数组中,与您的想法略有不同:

@steps[currentStep] 

@code{
  private RenderFragment[] steps;
  private int currentStep = 0;

  protected override void OnInitialized()
  {
    steps = new RenderFragment[4];
    steps[0] = @<component1 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />;
    steps[1] = @<component2 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />;
    steps[2] = @<component3 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />;
    steps[3] = @<component4 MoveForwardCallback="MoveForward" MoveBackwardCallback="MoveBackward"  />;
  }

  private void MoveForward()
  {
    if (currentStep < 3) currentStep += 1;
  }

  private void MoveBackward()
  {
    if (currentStep > 0) currentStep -= 1;
  }
}

示例:https://blazorrepl.com/repl/wvuoOtYb026k7nQj39

【讨论】:

  • 这个也非常适合我的需要,谢谢,我要在这里为未来的读者添加的唯一一件事是让数据结构成为一个列表更容易处理。我不知道为什么我决定从一个数组开始。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-18
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多