MediaElement или как проиграть звук в Silverlight (MVVM)

WPF, MVVM, Silverlight | создано: 17.11.2010 | опубликовано: 17.11.2010 | обновлено: 26.06.2024 | просмотров: 5245 | всего комментариев: 4

Как проиграть звук в Silverlight если контрол, который может это делать должен быть в XAML (является частью VisualTree), а команды Play(), Pause(), Stop() и так далее должны вызываться из ViewModel (речь идет о MVVM). Именно такая задача встала передо мной на днях.

В одной моей программе, которая должна проигрывать звуки этих самых звуков должно быть два. Так вот, как я это сделал:

1. В XAML добавил такой код:

<ItemsControl ItemsSource="{Binding Media}" Width="0" Height="0" />

2. Во ViewModel добавил свойство:

#region свойство Media
/// <summary>
/// поле для хранения значений свойства <see cref="Media"/>
/// </summary>
private List<MediaElement> media = null;
/// <summary>
/// наименование поля для свойства <see cref="Media"/>
/// </summary>
private const string MediaPropertyName = "Media";
/// <summary>
/// описание.
/// </summary>
public List<MediaElement> Media
{
    get
    {
        return media;
    }
    set
    {
        media = value;
        OnPropertyChanged(MediaPropertyName);
    }
}
#endregion свойство Media

3. И соответственно в контструкторе к моего ViewModel добавил инициализацию моей коллекции MedialElement:

Media = new List<MediaElement>();
Media.Add(new MediaElement()
{
     Source = new Uri("/Quiz;component/Media/right.wma", UriKind.Relative),
     AutoPlay = false
});
Media.Add(new MediaElement()
{
     Source = new Uri("/Quiz;component/Media/wrong.wma", UriKind.Relative),
     AutoPlay = false
});

4. Вот, собственно говоря, и всё.

Теперь в моем модуле (ViewModel) я могу обращаться к элементам коллекции через индексатор, например, методе выполнения команды при правильном ответе на вопрос:

if (Media != null)
{
    Media[0].Stop();
    Media[0].Play();
}

Комментарии к статье (4)

Супер! Помогло! Автору зачёт!

не получилось. в эксептион не вылетает, а музыки все равно нет. не работают ни wav, mp3, wma файлы. пробую второй день :(

допишите в статью, что нужно релизить. дебаг не работает с музыкой

Статья изрядно запоздала. Уже даже Microsoft отворачивается от сервелата. Надо учить Html5.