【发布时间】:2020-04-24 23:56:28
【问题描述】:
我的 MainLayout.razor 包含两个组件:Header.razor 和 Content.razor。通过选择不同的菜单选项内容得到改变。随着每个内容的变化,我需要将依赖于内容的 value 发送到 header。我尝试了不同的技术,结果相同 - header 中的 value 没有得到更新。还有什么我需要做的吗?我的代码:
Header.razor:
<div>Content Name: @ContentName</div>
@code {
[Parameter]
public string ContentName{ get; set; }
}
Content.razor:
@code{
[CascadingParameter]
MainLayout Parent { get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
ContentName = "Content 1";
Parent.SetParameters(ContentName);
}
}
MainLayout.razor:
@inherits LayoutComponentBase
@inject BlazorQART.Data.AppState AState
<div class="sidebar" >
<NavMenu />
</div>
<div class="main">
<div class="top-row px-4">
<Header ContentName="@_ContentName" />
</div>
<div class="content px-4">
<CascadingValue Value="@this">
@Body
</CascadingValue>
</div>
</div>
@code{
private string _ContentName{ get; set; }
protected override void OnInitialized()
{
base.OnInitialized();
AState.OnContentChange = OnContentChanged;
}
public void SetParameters (string content)
{
AState.ChangedContent = content;
}
protected async void OnContentChanged(string content)
{
await InvokeAsync(() =>
{
_ContentName = content;
});
}
AppState.cs:
public class AppState
{
private string _ChangedContent;
public Action<string> OnContentChange { get; set; }
public string ChangedContent
{
get { return _ChangedContent; }
set
{
_ChangedContent= value;
OnContentChange.Invoke(_ChangedContent);
}
}
}
【问题讨论】:
标签: blazor