我已經閱讀了許多有關播放聲音/動畫的最佳方式的博客,但如果可能的話,我希望看到一個關於如何完成這個操作的簡化示例,以便我更好地理解。如何在MVVM播放聲音和動畫
因此我在MVVM
觀的理解 - >聲音和動畫
視圖模型 - >如果某個值是真的,我想打視圖上的聲音和動畫。
現在我該如何去做這件事。我被告知使用ISoundService和IAnimationService等接口。在視圖中實現,然後做什麼?如果可能的話,一個可行的裸骨例子將有助於很多。
我已經閱讀了許多有關播放聲音/動畫的最佳方式的博客,但如果可能的話,我希望看到一個關於如何完成這個操作的簡化示例,以便我更好地理解。如何在MVVM播放聲音和動畫
因此我在MVVM
觀的理解 - >聲音和動畫
視圖模型 - >如果某個值是真的,我想打視圖上的聲音和動畫。
現在我該如何去做這件事。我被告知使用ISoundService和IAnimationService等接口。在視圖中實現,然後做什麼?如果可能的話,一個可行的裸骨例子將有助於很多。
就聲音而言,這不一定是處理它的視圖。舉例來說,我不喜歡這樣的播放聲音:
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();
}
}
然後,我使用依賴注入將它傳遞到我的視圖模型:
public class TheViewModel
{
public TheViewModel(IAudioPlayer audioPlayer)
{
// probably store it as a private readonly field for later use.
}
}
另一種選擇是有一個完善的售後服務坐在那裏,偵聽ViewModel通過一些消息系統發送的事件... EventAggregator,例如。
就動畫而言,相同類型的方法可以工作。通常,我在XAML中的視圖中定義動畫。然後,在視圖中,我偵聽從ViewModel觸發的某種事件,以通知View執行該動畫。
另外,在過去,我使用了數據綁定來增加在ViewModel中控制的值,所以仍然有一些可測試的行爲來管理動畫。
我使用的另一種方法是混合MVVM/MVP事物,ViewModel通過一個名爲ExecuteDeletionAnimation的方法傳遞一個IView接口。 ViewModel調用該方法,View實現該方法。
希望這會有所幫助嗎?
我認爲結構會看起來像......
型號 - >包含聲音和視頻/位圖
視圖對象 - >包含故事板
視覺控制視圖模型 - >處理動畫事件的控制器
我還沒有深入研究WPF動畫,但從我所見到的你需要在UIElements和Controller之間有非常密切的關係。 MVVM擅長的是將邏輯層與表示層分離,這可能會導致相當大的痛苦。而不是使用MVVM,你可能想看看View和Controller之間有更緊密關係的MVC模式。
我不認爲在Silverlight中有一個SoundPlayer,問題是如何標記的。 – 2012-01-11 16:46:41