MediaElement или как проиграть звук в Silverlight (MVVM)
WPF, MVVM, Silverlight | создано: 17.11.2010 | опубликовано: 17.11.2010 | обновлено: 26.06.2024 | просмотров: 5231 | всего комментариев: 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.