Просто нужно говорить текстовую строку из ViewModel (унаследованной от MVVM Light ViewModelBase
) до MediaElement
на странице XAML.Как отправить поток из ViewModel в MediaElement на странице XAML?
var synthesisStream = await synthesizer.SynthesizeSsmlToStreamAsync(text);
media.AutoPlay = true;
media.SetSource(synthesisStream, synthesisStream.ContentType);
media.Play();
В приведенном выше коде отсутствует разделение ViewModel. Мы видим, что media
напрямую обрабатывается кодом.
В моей ViewModel, я остановился на
var synthesisStream = await synthesizer.SynthesizeSsmlToStreamAsync(text);
var msg=new PlaySpeechSynthesisStreamMessage(synthesisStream);
Messenger.Default.Send<PlaySpeechSynthesisStreamMessage>(msg);
Для сообщения:
public class PlaySpeechSynthesisStreamMessage
{
public SpeechSynthesisStream Stream { get; set; }
public PlaySpeechSynthesisStreamMessage(SpeechSynthesisStream stream)
{
Stream = stream;
}
}
ли Messenger
правильный способ справиться с этой ситуацией? Как мы можем написать RelayCommand
или что-то передать потоку media
?
Соответствующая статья MVVM pattern violation: MediaElement.Play(), похоже, относится к этой проблеме, но она не в MVVM Light, и нет способа передать поток.