The way you did solves the problem, but in an environment with multiple classes and multiple levels of objects you will have reference problems. Outside the coupling between classes that will only grow, if you need to change the name __ mainFrame at some point, you will have to exit changing into multiple files. Anyway, the maintenance will be extremely complex.
A better solution (there are others, for sure) is to create an Action property on your page1, assign a role to it on your Windows1, and then run on page1 when you need it.
Example:
Class Window1{
construtor(){
// crie uma instancia de page1 ou acesse uma já existente, como exemplo, vou criar
var page1 = new page1();
page1.FazerAlgumaCoisa = () => {
__mainFrame; // aqui você tem acesso ao objeto __mainFrame para fazer o que quiser
}
}
__mainFrame; // acessa normal
}
Class page1{
public Action FazerAlgumaCoisa { get; set;}
public void ExecutarAcaoNoMainFrame(){
this.FazerAlgumaCoisa?.Invoke();
}
}
You can also pass parameters if necessary, just change your Action property, as in the example below where I pass a string.
Class Window1{
construtor(){
// crie uma instancia de page1 ou acesse uma já existente, como exemplo, vou criar
var page1 = new page1();
page1.FazerAlgumaCoisa = (parametro1) => {
__mainFrame; // aqui você tem acesso ao objeto __mainFrame para fazer o que quiser
//parametro1 pode ser usada aqui
}
}
__mainFrame; // acessa normal
}
Class page1{
public Action<string> FazerAlgumaCoisa {get;set;}
public void ExecutarAcaoNoMainFrame(){
this.FazerAlgumaCoisa?.Invoke("qualquer valor");
}
}