首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将MediaStreamSource绑定到MediaElement

将MediaStreamSource绑定到MediaElement
EN

Stack Overflow用户
提问于 2012-01-10 10:10:45
回答 2查看 1.2K关注 0票数 1

我有一个动态生成的MediaStreamSource,我想绑定到MediaElement。不幸的是,Source属性只接受URI,所以我运气不好。

我可以在后面的代码中调用一个方法SetSource,但是我不知道如何在维护MVVM模式的同时做到这一点。

有人有方法让我将MediaElement绑定到源吗?

解决方案(感谢Claus )

我定义了一个类MainPageLoaded作为消息类。

代码语言:javascript
复制
public class MainPageLoaded
{
    public MediaStreamSource StreamSource
    {
        get;
        set;
    }
}

然后,我在视图模型中发送消息。

代码语言:javascript
复制
var msg = new MainPageLoaded(){ StreamSource = new MediaStreamSource()};
Messenger.Default.Send<MainPageLoaded>(msg);

并在我看来接受它

代码语言:javascript
复制
Messenger.Default.Register<MainPageLoaded>(this, (action) => SetSoundSource(action));

在处理之前

代码语言:javascript
复制
private void SetSoundSource(MainPageLoaded action)
{
    SoundElement.SetSource(action.StreamSource);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-15 19:23:36

还可以使用CommandParameter将MediaElement传递给ViewModel,并在viewModel中设置媒体源:

代码语言:javascript
复制
    public MyViewModel()
    {
        PlayPreviewCommand= new DelegateCommand(PlayPreview, CanPlayPreview);
    }

    public ICommand PlayPreviewCommand
    {
        get;
        set;
    }

    public void PlayPreview(object par)
    {
        if (par != null && par is MediaElement)
        {
            var preview = composition.GeneratePreviewMediaStreamSource(640, 480);
            (par as MediaElement).SetMediaStreamSource(preview);
            (par as MediaElement).Play();
        }
    }

在Xaml视图中

代码语言:javascript
复制
<MediaElement x:Name="mediaElement" />
        <AppBarButton Icon="Play"
                      Label="Play"
                      Command="{Binding PlayPreviewCommand}"
                      CommandParameter="{Binding ElementName=mediaElement}">
票数 1
EN

Stack Overflow用户

发布于 2012-01-10 10:40:51

,但是我不知道如何在维护MVVM模式的同时做到这一点。

事件聚合。大多数(如果不是全部) MVVM框架都有一个Messenger或事件聚合器,允许您发布和订阅自定义事件。

在MVVM Light中,您可以这样做:

发布(来自ViewModel):

代码语言:javascript
复制
Messenger.Default.Send(new MediaStreamSource(...));

订阅(在您的视图中)

代码语言:javascript
复制
Messenger.Default.Register<MediaStreamSource>(this, source => { element.SetSource(source); })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8801537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档