2016-11-17 60 views
2

我在我的應用程序中第一次使用Windows.UI.Composition框架。我的應用程序建立在MVVM Light上。我正在更新應用程序以在元素之間添加更多的過渡動畫。如何將Windows.UI.Composition動畫集成到UWP MVVM Light應用程序

MVVM的主流觀點是,您應該儘可能將您的UI代碼保留在XAML中,將視覺狀態綁定到ViewModel屬性等。但所有Windows.UI.Composition材質和樣本而是在代碼隱藏中定義UI操作。

讓我們以show/hide方案爲例。我的ViewModel中有一個bool屬性,如ShowTheBox。我將TheBox的Visibility屬性綁定到ViewModel屬性。該Box會根據ViewModel中的更改自動顯示或隱藏。

現在,使用Windows.UI.Composition,我想添加淡入/淡出動畫到TheBox的可見性變化。哪裏是放置該C#代碼的最佳地點,以及如何將該轉換綁定到我的ShowTheBox屬性?

回答

1

我不同意MVVM的觀點是僅僅在XAML中保留UI代碼。與其他任何層分離模式一樣,MVVM的意義在於將UI層與應用程序的邏輯分開。 MVVM只是以綁定的形式添加自己的風格。

所以我認爲,當你有複雜的動畫和其他UI相關的東西時,把它們放在代碼隱藏中是完全正確的。但在這之前,您可能想嘗試儘可能多地提取自定義控件的動畫,這會稍微增加您的疑惑。

編輯: 使很多直接綁定到ViewModel屬性的UI邏輯並不總是一個好的解決方案。存在圖層分離是有原因的,所以當你編寫圖層時,需要對Xamarin應用程序進行圖像處理,並且具有相同的ViewModel,但對於不同的平臺使用不同的視圖。現在你甚至不確定在另一個平臺上是否會有這些動畫。也許在UWP上需要一個屏幕的流程在iOS上需要兩個屏幕,或者其他的東西。要擁有僅爲衆多觀點中的一種提供服務的「IsVisible」屬性現在沒有多大意義,是嗎?所以你必須爲ViewModel找到一些常見的命名,並將其他所有內容移到UI層。

在一天結束時,MVVM只是一種模式,可以幫助您編寫更好的代碼。儘可能地堅持所有的良好實踐是可以理解的,但如果它對你的應用沒有意義 - 它值得嗎?

+0

這一切都有道理,但無論代碼是否在代碼隱藏中,我都不明白我是如何從簡單的顯示/隱藏場景移動到基於我的ViewModel屬性(如我所描述的)淡入/淡出動畫。似乎每次我想簡單地淡入淡出某些東西都會矯枉過正,就必須創建一個自定義控件。 – Scott

+0

嗯,我想你被搞砸了,在殘酷的MVVM世界裏沒有動畫可能:)在一個嚴肅的筆記,檢查我更新的答案。我希望它有一點幫助。 –

+0

並非每個人都有選擇框架的奢侈。值得與否我堅持使用MVVM Light應用程序。我的例子不是很好的例子。我的ViewModel實際上並不包含UI信息,它反映了數據的不同狀態。各種UI元素通過VM綁定到數據的狀態。這適用於簡單的可見性。我遇到的問題是如何將轉換動畫集成到元素的可見性中,以使UI更加優雅。我已經嘗試過XAML Transitions,但它們只在元素創建時播放一次。我不清楚如何讓這些由可視性觸發。 – Scott

相關問題