3

サウンド/アニメーションを再生する最良の方法についてのブログをたくさん読みましたが、可能であれば、これがどのように行われるかについての簡単な例を見て、よりよく理解できるようにしたいと思います.

MVVMでの私の理解では

ビュー --> サウンドとアニメーション

ViewModel --> いくつかの値が true の場合、ビューでサウンドとアニメーションを再生したいと思います。

さて、どうすればこれを行うことができますか。ISoundService や IAnimationService などのインターフェイスを使用するように言われました。ビューに実装してから何をしますか? 可能であれば、実行可能なベアボーンの例が大いに役立ちます。

4

2 に答える 2

8

サウンドに関する限り、これは必ずしもそれを処理するビューではありません。たとえば、サウンドを再生するために次のようなことを行います。

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 がメソッドを実装します。

これが少し役立つことを願っていますか?

于 2010-06-07T01:43:51.570 に答える
1

みたいな構造になると思いますが…

モデル -> サウンドとビデオ/ビットマップを含むオブジェクト

ビュー -> ストーリーボードを含むためのビジュアル コントロール

ViewModel -> アニメーション イベントを処理するためのコントローラー

私は WPF アニメーションについて深く掘り下げていませんが、これまで見てきたことから、UIElements と Controller の間にはかなり密接な関係が必要です。MVVM が優れているのは、プレゼンテーション層からのロジック層の分離です。これにより、かなりの苦痛が生じる可能性があります。MVVM を使用する代わりに、View と Controller の関係がより緊密な MVC パターンを確認することをお勧めします。

于 2010-06-03T10:53:41.853 に答える