Как играть в звук и анимацию в MVVM - PullRequest
3 голосов
/ 02 июня 2010

Я читал много блогов о том, как лучше всего воспроизводить звук / анимацию, но, если возможно, я хотел бы увидеть упрощенный пример того, как это делается, чтобы лучше понять.

Так что, насколько я понимаю, в MVVM

Вид -> Звук и анимация

ViewModel -> Если какое-то значение истинно, я бы хотел воспроизвести звук и анимацию на виде.

Теперь, как бы я поступил так? Мне сказали использовать интерфейсы, такие как ISoundService и IAnimationService. Реализовать в View, а затем делать что? Если возможно, полезный пример с обнаженной костью поможет во многом.

Ответы [ 2 ]

8 голосов
/ 07 июня 2010

Что касается звука, это не обязательно тот вид, который его обрабатывает. Например, я делаю что-то вроде этого для воспроизведения звука:

public interface IAudioPlayer
{
    void Play(string fileName);
}

public class AudioPlayer : IAudioPlayer
{
    private readonly SoundPlayer player = new SoundPlayer();

    public void Play(string fileName)
    {
        player.Stream = File.OpenRead(fileName);
        player.Play();
    }
}

Затем я использую Dependency Injection, чтобы передать его в мою ViewModel:

public class TheViewModel
{
    public TheViewModel(IAudioPlayer audioPlayer)
    {
         // probably store it as a private readonly field for later use.
    }
}

Другим вариантом может быть размещение звуковой службы, слушающей события, которые ViewModel отправляет через какую-то систему сообщений ... Например, EventAggregator.

Что касается анимации, могут работать те же типы подходов. Обычно я определяю анимацию в представлении в XAML. Затем в представлении я прослушиваю какое-то событие, которое должно быть запущено из ViewModel, чтобы сказать представлению выполнить эту анимацию.

Кроме того, в прошлом я использовал привязку данных к двойным значениям, которые контролируются в ViewModel, поэтому все еще существует некоторое тестируемое поведение, управляющее анимацией.

Еще один подход, который я использовал, - это гибридный MVVM / MVP, где ViewModel получает интерфейс IView с методом, который называется ExecuteDeletionAnimation. ViewModel вызывает метод, а View реализует метод.

Надеюсь, это немного поможет?

1 голос
/ 03 июня 2010

Я думаю, что структура будет выглядеть примерно так ...

Модель -> Объект, содержащий звук и видео / растровые изображения

Просмотр -> Визуальный контроль для размещения раскадровки

ViewModel -> Контроллер для обработки событий анимации

Я не слишком углубился в анимацию WPF, но из того, что я увидел, вам нужно иметь довольно тесные отношения между UIElements и контроллером. Превосходство MVVM - это его отделение логического уровня от уровня представления, это может причинить вам немало боли. Вместо использования MVVM вы можете захотеть взглянуть на шаблон MVC, который имеет более тесную связь между представлением и контроллером.

...