Поскольку вы уже используете MVVM, я бы порекомендовал пройти полный маршрут, используя "Интерактивность", "Команды" и "дочерние ViewModels".Это часто используемый шаблон в приложениях MVFM WPF, который также можно применять к приложениям UWP.
Использование «Интерактивности» и взаимодействий
Библиотека интерактивности / поведения от Microsoft позволяет связыватьсобытия в XAML до ICommand
в ViewModel
.Вы можете получить управляемый пакет NuGet здесь .
Из официальных примеров на GitHub , сокращенно:
<Button x:Name="button1" Content="Increment">
<Interactivity:Interaction.Behaviors>
<Interactions:EventTriggerBehavior EventName="Click" SourceObject="{Binding ElementName=button1}">
<Interactions:InvokeCommandAction Command="{Binding UpdateCountCommand}"/>
</Interactions:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
Пересылать данные команды ребенкуViewModel
Теперь, когда это событие перенаправлено на вашу команду в родительском ViewModel, вы можете либо вызвать свой оверлей ViewModel и передать информацию непосредственно ему:
private readony IOverlayViewModel _overlayViewModel;
public ICommand UpdateCountCommand { get; set; }
ctor(IOverlayViewModel overlayViewModel)
{
_overlayViewModel = overlayViewModel;
UpdatedCountCommand = new MyICommandImplementation(UpdatedCountCommand_Executed);
}
private void UpdatedCountCommand_Executed(/* Add correct method signature */)
{
// If needed, retrieve data from parameter...
// Update overlay ViewModel text
_overlayViewModel.Text = ""; // Whichever text was calculated before
}
Или вы используете мессенджер( шаблон-посредник ) для отправки его в оверлей.