Вы можете использовать Event Aggregators для этой цели. В вашем текущем сценарии вы могли бы начать с объявления объекта Message, который будет использоваться для передачи информации между моделями представления Child и Parent.
public class SelectedItemChangedMessage<T>
{
public T SelectedItem;
}
Чтобы опубликовать сообщение, вы можете использовать класс EventAggregator. Например, вы можете сделать следующее из ChildViewModel.
public class ChildViewModel
{
private IEventAggregator _eventAggregator;
public ChildViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
}
public void Change()
{
_eventAggregator.PublishOnUIThread(new SelectedItemChangedMessage<string>(){ SelectedItem = selectedItem });
}
}
А затем в вашей ParentViewModel вам нужно будет подписаться на EventAggregator
public class ShellViewModel:Screen, IHandle<SelectedItemChangedMessage<string>>
{
private IEventAggregator _eventAggregator;
public ShellViewModel(IEventAggregator eventAggregator)
{
_eventAggregator = eventAggregator;
_eventAggregator.Subscribe(this);
}
public void Handle(SelectedItemChangedMessage<string> message)
{
Debug.WriteLine($"Item Changed, current selection : {message}");
}
}