2009-09-29 36 views
2

場景:我有一個(數字)文本框,一個按鈕和一個標籤。當點擊該按鈕,我想在標籤的文本框爲「動畫」的數值(像旋轉轉盤)動態動畫,命令和關注點分離

考慮:

一),在故事板動畫不能有數據綁定(因爲他們不是FrameworkElements) b)Silverlight中缺少觸發器

什麼是最好的,視圖模型與視圖的故事板耦合最少,如何更新目標動畫值並在按鈕啓動時啓動動畫點擊?

注:該方案是概念上的,所以不要集中在「動畫」號或任何的細節

回答

2

如果您的目標是嚴格減少視圖中的代碼隱藏,我認爲標籤上的附加行爲對此起作用。標籤上的附加行爲會將數字暴露給動畫,並且當此數字更改時,動畫(在代碼中)將運行以從舊值動畫到新值。

一個缺點是您的動畫現在在代碼中,除非您在資源文件中存儲一個模板(只是假的值的開始)版本,您可以根據需要加載它並替換模板值。

這個article from Josh Smith似乎是附加行爲的權威;

http://joshsmithonwpf.wordpress.com/2008/08/30/introduction-to-attached-behaviors/

+0

是的,這是我認爲考慮的方向。我更喜歡在後面的代碼中使用零代碼。謝謝! – 2009-09-29 20:47:20

0

我最近在一個MVVM應用程序來解決類似的問題。我的問題是我需要將容器的高度從零設置爲auto。由於Auto是一個動態值,因此我認識到需要根據需要構建(或操縱)動畫(或故事板)。我放置的解決方案涉及使用視圖代碼隱藏來更新和激發動畫。

這不是最適合MVVM的方法;然而,WPF中的動畫在XAML中可能會非常棘手。由於此解決方案實際上只是XAML限制的一種解決方法,因此將代碼直接與視圖綁定似乎是可以的。同樣,如果視圖被嘲笑,那麼就不會有框架元素進行動畫處理,所以將這些代碼放在VM側是沒有意義的。

有沒有人有更好的方法?

+0

你可以一個AnimatedValue屬性總是添加到IViewInterface,並有從動畫本身的get/set值,從抽象的虛擬機動畫。我仍然更喜歡更好的方式,但是;) – 2009-09-29 13:50:44