Что касается звука, это не обязательно представление, которое его обрабатывает. Например, я делаю что-то подобное для воспроизведения звука:
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 реализует метод.
Надеюсь это немного поможет?
person
Brian Genisio
schedule
07.06.2010