Получить главному окну свойство из VM вложенного UserControl WPF MVVM
Имеется главное окно с привязкой DataContext к MainViewModel, у которого есть кнопка(назовем ее playbutton), запускающая (по задумке) воспроизведение аудиофайла. Внутри окна есть UserContol "AudioPage", в котором находятся элементы для взаимодействия с аудио (плейлисты, выбор аудио, и т.д.) и у этого UserControl прописан в XAML-коде DataContext с вьюмоделью (AudioPageVM). Внутри этой вьюмодели есть пару свойств с типами вьюмоделей, одна из которых это SongVM, которая уже и хранит в себе выбранное в списке аудио, а так же RelayCommand, который запускает воспроизведение песни.
Соответственно возникает 3 вопроса:
- Как мне передать RelayCommand из SongVM (который находится в UserControl) в playcommand (из главного окна)? И как это сделать для других значений (допустим передать название выбранной песни в TextBox из главного окна)?
- Можно ли решить эту проблему хранением AudioPageVM в MainViewModel, если да, то как?
- И насколько целесообразно с точки зрения MVVM и чистоты кода делать такую жесткую иерархию вью-моделей, в которой они напрямую "вложены" друг в друга?
Проблема появилась совсем недавно, т.к. до этого я просто разделял мои вьюмодели, и воспроизводил песню внутри UserControl'а, т.к. у него есть привязка к нужной мне вьюмодели.
RelayCommand из SongViewModel:
private RelayCommand? _playCommand;
public RelayCommand PlayCommand
{
get
{
return _playCommand ??= new RelayCommand(execute =>
{
if (!IsPlaying && SelectedSong != null)
{
PlayAudio();
return;
}
PauseAudio();
}, canExecute =>
{
return SelectedSong != null;
});
}
}
Привязка DataContext в AudioPage
<UserControl.DataContext>
<vm:AudioPageVM />
</UserControl.DataContext>