2011-06-09 74 views
2

我重構一個Silverlight LOB應用程序使用MVVM ..動畫線索應該在我的視圖模型中嗎? MVVM

在我控制我有目前得到的代碼隱藏一旦數據被加載引發了一些動畫..

這是查看特定數據並且由於視圖模型被認爲是無頭稍微(不依賴於像動畫視圖對象)..

應該在哪裏這個代碼是什麼?

感謝

回答

2

一個DataTrigger,一個DataTrigger!我的DataTrigger王國!

在WPF中,您可以根據ViewModel中的數據觸發動畫。在Silverlight中,他們使用VSM ......我仍然沒有想過如何完成這個任務。顯然,Blend Behavior SDK(可以單獨下載)提供了一種DataTrigger近似,VSM的觸發基於綁定行爲。 This stackoverflow question(不是接受的答案,但是由Mike Post發佈的答案)顯示瞭如何做到這一點...並且後續答案顯示瞭如何在沒有混合的情況下做到這一點。

+0

我給你+1幽默。程序員需要更多的! = d – 2011-06-09 17:11:12

+0

好答案..拼命想用VSM ..但唯一的問題是控制是一個網格..而你不能設置一個模板在網格上,有什麼建議? – 2011-06-10 09:37:16

+0

您正試圖在面板中設置動畫效果嗎?或者你更關心網格中的元素。例如,如果您試圖在數據加載時將控件動畫到視圖中,則只需直接指向該對象。如果你正在嘗試動畫整個網格,請將其包裝在UserControl中並將其作爲目標。 – 2011-06-10 14:32:43

2

總之,你可以拼湊動畫觸發數據觸發 - 沒有後臺代碼需要。其他View技術(不是WPF或Silverlight)將要求您向ViewModel添加「數據加載完成」事件。

MVVM簡直是MVP與WPF/Silverlight的整合,使信號這樣的事情更容易。我相信WPF包含一個數據觸發器,可以用來觸發動畫。這允許您放棄向ViewModel添加「數據加載完成」事件。你現在可以添加事件,但是你可能會浪費你的時間,爲可能不需要的MVP兼容性準備代碼。

MVVM和MVP的目的是使演示視圖互換。考慮WinForms,WinCE,純文本終端(甚至文本到語音)View如何通知用戶數據已加載。每種技術的行爲都會有所不同。因此,當不使用WPF或Silverlight時,更改用戶界面的行爲應該駐留在View的代碼隱藏中。

+0

+1對於爲什麼動畫是一個視圖問題有一個很好的解釋,應該留在視圖中。 – avanek 2011-06-09 17:09:15

+1

絕對很好的答案......要添加到你所說的話,今天的需求可能是一個動畫,明天它可能會顯示以前隱藏的用戶界面部分。虛擬機不應該關心會發生什麼情況,只需提供足夠的信息以便View可以響應。\ – 2011-06-09 17:15:15

相關問題