Q:

Caliburn.micro parent->child and child->parent interactions

I am working on an WPF app using Caliburn.micro.  In there I have a mainViewModel which extends Conductor and two subviewModels which are extending Screen.  These two view models are activated by the tab control in my MainViewModel.  I have strings that belong to MainViewModel and I need to conduct these strings to the both subViewModels.  The strings which I need pass to the subViewModels are binded in the MainView to the Textboxes.  I'd like to pass these strings to the subViewModel and even if these strings are changed from the MainViewModel I need to have my subViewModels is updated.  For now I am giving a MainViewModel as a parameter in constructor of each subViewModel, but I am pretty sure that there is a better way
basically I would like to bind child property to the parent property and report any of them if the property has been changed in parent or in child ViewModel. 
Can you point me in good direction? 

A:

You can make use of EventAggregators to achieve this.  

For those unfamiliar, an Event Aggregator is a service that provides
  the ability to publish an object from one entity to another in a
  loosely based fashion. 

You can read more on Event Aggregators here 
You begin by defining your CustomMessage which would contain the message to be passed. 
public class CustomMessage
{
    public string String1 { get; set; }
}

Now you proceed to your ParentViewModel and create an instance of event aggregator. 
private IEventAggregator _eventAggregator;
[ImportingConstructor]
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator. Subscribe(this);
}

In the Setter of your property that is bound to your Textbox, you would now add code to publish the message using Event Aggregator. 
For example,
public string String1
{
    get => _string1;
    set
    {
        if (_string1.Equals(value)) return;

        _string1 = value;
        _eventAggregator. PublishOnUIThread(new CustomMessage
        {
            String1 = _string1,
        });

    }

}

Now you head to your Child View Model and subscribe to the event aggregator. 
private IEventAggregator _eventAggregator;
[ImportingConstructor]
public SecondWinViewModel(IEventAggregator eventAggregator)
{
    _eventAggregator = eventAggregator;
    _eventAggregator. Subscribe(this);
}

In order to subscribe for the particular message (in this case, CustomMessage), you need to implement the interface IHandle. 
[Export(typeof(SecondWinViewModel))]
public class SecondWinViewModel : Screen, IHandle<CustomMessage>

The interface requires a single method, which you would use to recieve the message and update the required property in your Child Window. 
public void Handle(CustomMessage message)
{
    String1 = message. String1;
    NotifyOfPropertyChange(nameof(String1));
}

You can do the same for multiple parameters by adding more properties in your CustomMessage.  In the same way, you can pass messages from Child Vm to Parent Vm.