这是我刚刚使用接口发布的一篇关于该主题的文章:
https://datajugglerblazor.blogspot.com/2020/01/how-to-use-interfaces-to-communicate.html
在此示例中,索引页是一个 IBlazorComponentParent 对象。
在登录组件上,最酷的部分是设置 Parent 属性,您只需设置 Parent=this:
它的工作方式是 Login 组件上 Parent 属性的 setter 调用父组件上的 Register 方法:
[Parameter]
public IBlazorComponentParent Parent
{
get { return parent; }
set
{
// set the parent
parent = value;
// if the value for HasParent is true
if (HasParent)
{
// Register with the parent to receive messages from the parent
Parent.Register(this);
}
}
}
然后在父组件或页面上,Register 方法存储对组件的引用:
public void Register(IBlazorComponent component)
{
// If the component object and Children collection both exist
if (NullHelper.Exists(component, Children))
{
// If this is the Login component
if (component.Name == "Login")
{
// Set the Login control
this.Login = component as Login;
}
// add this child
Children.Add(component);
}
}
此时,父页面和登录页面可以相互通信,因为它们都包含一个 ReceiveData 方法,您可以在其中发送消息。