Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Blazor-一个组件应该对另一个组件的方法作出反应_C#_Html_Razor_Blazor - Fatal编程技术网

C# Blazor-一个组件应该对另一个组件的方法作出反应

C# Blazor-一个组件应该对另一个组件的方法作出反应,c#,html,razor,blazor,C#,Html,Razor,Blazor,我用它来快速翻译HTML中的文本,只要我写一个像@MyText.Example这样的标记,它就可以正常工作。但是,如果我尝试对列表(参见我的footelayout.razor)执行相同的操作,则会有点不同。当我更改我的NaviHeaderBar中的值时,列表必须在FooterLayout中更改 我的主布局.razor如下所示: <div class="grid grid-cols-1" style="width: 100%;"> <

我用它来快速翻译HTML中的文本,只要我写一个像
@MyText.Example这样的标记,它就可以正常工作。但是,如果我尝试对
列表
(参见我的
footelayout.razor
)执行相同的操作,则会有点不同。当我更改我的
NaviHeaderBar
中的值时,列表必须在
FooterLayout
中更改

我的主布局.razor如下所示:

<div class="grid grid-cols-1" style="width: 100%;">
    <div class="grid-c-1 grid-r-1">
        <NaviHeaderBar />
    </div>

    <div class="grid-c-1 grid-r-1">
        <LoginDisplay />
    </div>


    <div class="grid-c-1 grid-r-1">
        @Body
    </div>

    <div class="grid-c-1 grid-r-1">
        <FooterLayout />
    </div>
</div>
现在,当我更改语言设置时,我的
FooterLayout.razor
不会更改它的文本。我可以让它改变它的文本,例如
@onmouseover
。但这意味着我必须将鼠标悬停在我的
页脚布局上


当我在
NaviHeaderBar
中更改语言设置时,是否有办法正确更改其文本?我该怎么做?

您需要某种状态管理(如Fluxor)或某种消息传递系统

public class MessagingSystem
{
  public event EventHandler<EventArgs> LanguageChanged;

  public void NotifyLanguageChanged()
  {
    LanguageChanged?.Invoke(this, EventArgs.Empty);
  }
}
公共类消息系统
{
公共事件处理程序语言已更改;
public void NotifyLanguageChanged()
{
LanguageChanged?.Invoke(此为EventArgs.Empty);
}
}
然后,您可以将其插入到标题中,并在选择新语言时调用
NotifyLanguageChanged

在页脚中,您可以插入它,然后订阅
LanguageChanged
,并在该事件中调用
InvokeAsync(statehaschange)

但是请记住,如果您使用标准的.NET事件,则必须在组件上实现
IDisposable
,以便您也可以取消订阅,否则服务将永远保留对组件的引用,并且不会对其进行垃圾收集

就个人而言,我只会使用Fluxor:)

@code
{
    private string CurrentLang;
    I18nText.NaviHeaderBarLanguage MyText = new I18nText.NaviHeaderBarLanguage();

    protected override async Task OnInitializedAsync()
    {
        MyText = await I18nText.GetTextTableAsync<I18nText.NaviHeaderBarLanguage>(this);
    }

    private async Task OnChangeCurrentLang(ChangeEventArgs args)
    {
        CurrentLang = args.Value as string;
        await I18nText.SetCurrentLanguageAsync(CurrentLang);
    }
}
                @foreach (LinkInput link in linkListInput)
                {
                    <a href=@link.linkURl style="height: 30px; line-height: 20px;">
                        <li class="list-item">@link.text</li>
                    </a>
                }

            </ul>
        </div>
@code{
    public List<LinkInput> linkListInput = new List<LinkInput>(){
        new LinkInput("text1", "/url1/"),
        new LinkInput("text2", "/url1/"),
        new LinkInput("text3", "/url1/"),
        new LinkInput("text4", "/url1/"),
        new LinkInput("text5", "/url1/")
    };

I18nText.FooterLayoutLanguage MyText = new I18nText.FooterLayoutLanguage();

protected override async Task OnInitializedAsync()
{
    MyText = await I18nText.GetTextTableAsync<I18nText.FooterLayoutLanguage>(this);

}
}
protected override async Task OnInitializedAsync()
{
    MyText = await I18nText.GetTextTableAsync<I18nText.FooterLayoutLanguage>(this);

    linkListInput.Clear();
    linkListInput.Add(new LinkInput(MyText.Example, "/url1"));
    linkListInput.Add(new LinkInput(MyText.Example, "/url1"));
    linkListInput.Add(new LinkInput(MyText.Example, "/url1"));
    linkListInput.Add(new LinkInput(MyText.Example, "/url1"));
    linkListInput.Add(new LinkInput(MyText.Example, "/url1"));
    StateHasChanged();
}
public class MessagingSystem
{
  public event EventHandler<EventArgs> LanguageChanged;

  public void NotifyLanguageChanged()
  {
    LanguageChanged?.Invoke(this, EventArgs.Empty);
  }
}