As you know one of the main objectives in Composite Applications is keeping functionality decoupled for testability and maintainability
purposes. For this reason, accessing controls placed in views of other modules is not a recommended practice because you would be breaking the module’s decoupling.
I will now try explain how I would personally approach each of your scenarios separately:
On click of a button in ModuleA.ViewA1, I have to load ViewA2 in RegionA
Since the views are in the same module, all you have to do is publish a regular .Net event (or through Event Aggregator, but it is not necessary) to
notify whoever is in charge of adding ViewA2 to a region (a ModuleController, a
Presenter, etc) that should add it. For this scenario, View Injection
is probably the recommended approach.
On click of a button in ViewA2, I have to load ViewB2 in RegionB with a parameter passed
In this scenario, since the views are in different modules, you could
publish an event with the Event Aggregator (passing the parameter you require
as the payload). In the subscriber, which should be in charge
of adding ViewB2 to a region, you should add ViewB2 to RegionB (you will already have the parameter).
In ViewA2, on load, I have to access a textbox value in ViewB1
My approach here would be having a service shared across the application, which would be kind of the application’s state and store the value of
that textbox in the application’s state service. You can read more about a similar situation
Please let me know if this helps.