【发布时间】:2016-10-19 14:40:06
【问题描述】:
只需将 ViewModel(继承自 MVVM Light ViewModelBase)中的文本字符串朗读到 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 中,也没有办法通过流。
【问题讨论】:
标签: mvvm-light