只需從ViewModel(從MVVM Light ViewModelBase
繼承)向XAML頁面上的MediaElement
發言。如何從ViewModel發送流到XAML頁面上的MediaElement?
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中,也沒有辦法傳遞流。