Вот статья, которую я только что опубликовал на эту тему с использованием интерфейсов:
https://datajugglerblazor.blogspot.com/2020/01/how-to-use-interfaces-to-communicate.html
В этом примере страница индекса представляет собой объект IBlazorComponentParent.
В компоненте входа в систему классная часть заключается в установке свойства Parent, вы просто устанавливаете Parent = this:

Способ это работает, если установщик для свойства Parent компонента Login вызывает метод 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, в который можно отправлять сообщения.