サウンドに関する限り、これは必ずしもそれを処理するビューではありません。たとえば、サウンドを再生するために次のようなことを行います。
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();
}
}
次に、依存性注入を使用して ViewModel に渡します。
public class TheViewModel
{
public TheViewModel(IAudioPlayer audioPlayer)
{
// probably store it as a private readonly field for later use.
}
}
もう 1 つのオプションは、ViewModel が何らかのメッセージング システムを介して送信するイベントをリッスンするサウンド サービスを用意することです。たとえば、EventAggregator です。
アニメーションに関しては、同じタイプのアプローチが機能します。通常、XAML のビューでアニメーションを定義します。次に、View で、ViewModel から発生するある種のイベントをリッスンして、そのアニメーションを実行するように View に指示します。
また、過去に、ViewModel で制御される double 値へのデータ バインディングを使用していたので、アニメーションを管理するテスト可能な動作がまだいくつかあります。
私が使用したもう 1 つのアプローチはハイブリッド MVVM/MVP のもので、ViewModel は ExecuteDeletionAnimation と呼ばれるメソッドを含む IView インターフェイスに渡されます。ViewModel がメソッドを呼び出し、View がメソッドを実装します。
これが少し役立つことを願っていますか?