Blazor CascadingParameter - между MainLayout.razor и NavMenu.razor - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть Basi c Приложение Blazor, созданное с помощью шаблона VS Blazor. Он создает MainLayout.razor и NavMenu.razor по умолчанию. MainLayout размещает Navmenu следующим образом:

<NavMenu/>

Мне нужно передать значение (объект из MainLayout в Navmenu - для обновления кнопок навигации. Я пытаюсь использовать CascadingParameter , но не могу заставить его работать.

В MainLayout.razor я добавил:

 <CascadingValue Value="@X" >
        <NavMenu/>
    </CascadingValue>

и

@code {

    public string X { get; set; }

и

  protected override async Task OnInitializedAsync()
    {
           X = "PASS SOMETHING";

В NavMenu.razor я добавил следующее

@code {

    [CascadingParameter]
    string X { get; set; }

затем

 protected override async Task OnInitializedAsync()
    {
         Console.WriteLine(X);

Но X всегда Null. Есть идеи? Что мне не хватает?

1 Ответ

3 голосов
/ 19 апреля 2020

Поскольку NavMenu является дочерним компонентом MainLayout, вы можете передать параметр компонента в NavMenu. Выполните следующие действия:

Определите свойство publi c в NavMenu для хранения значения, переданного из родительского

NavMenu.razor

 @code {
     [Parameter]
     public string Value { get; set; }

 }

И в MainLayout сделайте это :

<div class="sidebar">
    <NavMenu Value="@SomeValue" />
</div>


@code{

    private string SomeValue = "A value from MainLayout";
 }

Вот и все ...

Однако, если вы настаиваете на использовании CascadingValue, что на самом деле не подходит в данном случае, вы можете сделать это:

NavMenu.razor

  @code {
     [CascadingParameter]
     public string Value { get; set; }

     protected override async Task OnInitializedAsync()
     {
          Console.WriteLine(Value);

          await Task.CompletedTask;
     }
  }

И в MainLayout сделайте это:

 <div class="sidebar">
    <CascadingValue Value="@SomeValue">
        <NavMenu />
    </CascadingValue>
 </div>



 @code{

     private string SomeValue = "A value from MainLayout";
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...