C# Blazor 错误 BL0005 - 正确设置组件属性

Joe*_*ore 2 c# blazor visual-studio-2019

我已经对这个错误做了我可以做的研究,只是不理解正确的解决方案。

示例代码(直接取自供应商示例)
https://blazor.syncfusion.com/documentation/menu-bar/getting-started/

<SfMenu Items="@MenuItems"></SfMenu>

@code {
    public List<MenuItem> MenuItems = new List<MenuItem>{
        new MenuItem{ Text = "File", Items = new List<MenuItem>{
            new MenuItem{ Text= "Open" },
            new MenuItem{ Text= "Save" },
            new MenuItem{ Text= "Exit" }}
    },
        new MenuItem{ Text = "Edit", Items = new List<MenuItem>{
            new MenuItem{ Text= "Cut" },
            new MenuItem{ Text= "Copy" },
            new MenuItem{ Text= "Paste" }}
    },
        new MenuItem{ Text = "View", Items = new List<MenuItem>{
            new MenuItem{ Text = "Toolbars" },
            new MenuItem{ Text = "Zoom" },
            new MenuItem{ Text = "Full Screen" }}
    },
        new MenuItem{ Text = "Tools", Items = new List<MenuItem>{
            new MenuItem{ Text= "Spelling & Grammar" },
            new MenuItem{ Text= "Customize" },
            new MenuItem{ Text= "Options" }}
    },
        new MenuItem{ Text = "Go" },
        new MenuItem{ Text = "Help" }
    };
}
Run Code Online (Sandbox Code Playgroud)

这将生成 BL0005 组件参数“文本”不应设置在其组件之外。它将使用所有参数执行此操作。

这是设置要传递给子组件的变量的代码。我看不到其他设置方法。组件没有提供单独的 setter。我真的不明白 VS 团队希望我如何构建和传递这些数据(如果他们的代码编译时出现相同的警告,显然供应商也不会)。

谁能提供一个具体的例子来说明应该如何做到这一点?
我已经阅读了在 blazor 中改变组件属性的正确方法,但在这种情况下我显然无法修改子组件,因为它是第三方库。

Pet*_*ris 8

用 [Parameter] 修饰的属性不应该通过代码设置,因为 OnParametersSet 生命周期方法不会被调用,所以它们只能由 razor 标记中的父组件设置。

在您的情况下,因为值不会改变,所以忽略这些警告应该没问题。如果您在代码隐藏文件 (MyComponent.razor.cs) 中创建菜单项,则可以执行此操作

public partial class MyComponent
{
  protected override void OnInitialized() 
  {
#pragma warning disable BL0005
    // create the menu structure here
#pragma warning restore BL0005
  } 
} 
Run Code Online (Sandbox Code Playgroud)