C# 如何将Windows.UI.Composition动画集成到UWP MVVM Light应用程序中

C# 如何将Windows.UI.Composition动画集成到UWP MVVM Light应用程序中,c#,xaml,uwp,mvvm-light,C#,Xaml,Uwp,Mvvm Light,我第一次在我的应用程序中使用Windows.UI.Composition框架。我的应用程序是基于MVVM Light构建的。我正在更新应用程序,以便在元素之间添加更多过渡动画 MVVM的主流观点是,您应该尽可能将UI代码保存在XAML中,将可视状态绑定到ViewModel属性等。但我看到的所有Windows.UI.Composition材料和示例都在代码中定义UI操作 让我们以显示/隐藏场景为例。我的ViewModel中有一个bool属性,如ShowTheBox。我将长方体的可见性属性绑定到Vi

我第一次在我的应用程序中使用Windows.UI.Composition框架。我的应用程序是基于MVVM Light构建的。我正在更新应用程序,以便在元素之间添加更多过渡动画

MVVM的主流观点是,您应该尽可能将UI代码保存在XAML中,将可视状态绑定到ViewModel属性等。但我看到的所有Windows.UI.Composition材料和示例都在代码中定义UI操作

让我们以显示/隐藏场景为例。我的ViewModel中有一个bool属性,如
ShowTheBox
。我将长方体的可见性属性绑定到ViewModel属性。该框将根据我的ViewModel中的更改自动显示或隐藏


现在,使用Windows.UI.Composition,我想将淡入/淡出动画添加到长方体的可见性更改中。哪里是放置C代码的最佳位置,如何将转换绑定到我的
ShowTheBox
属性

我不同意MVVM的要点是将UI代码独占地保存在XAML中。MVVM的要点和任何其他层分离模式一样,是将UI层与应用程序的逻辑分离。MVVM只是以绑定的形式添加了自己的风格

所以我认为当你有复杂的动画和其他与用户界面相关的东西时,把它们放在代码后面是很好的。但在这样做之前,您可能希望尝试将尽可能多的动画提取到自定义控件,这将稍微方便您的疑虑

编辑: 将许多UI逻辑直接绑定到ViewModel属性并不总是一个好的解决方案。层分离的存在是有原因的,所以当你组成层时,你会发现你正在编写一个Xamarin应用程序,并且有共同的视图模型,但不同平台的视图不同。现在你甚至不确定在另一个平台上是否会有这些动画。也许在UWP上使用一个屏幕的流将在iOS上使用两个屏幕,或者其他什么。让一个属性“IsVisible”只服务于多个视图中的一个视图现在没有多大意义,是吗?因此,您必须为ViewModel找到一些通用名称,并将其他所有内容移动到UI层


说到底,MVVM只是一种模式,可以帮助您编写更好的代码。想要尽可能地坚持所有的好做法是可以理解的,但如果这对你的应用程序没有意义——值得吗?

这一切都有意义,但不管代码是否在代码背后,我不知道如何根据绑定到可见性的ViewModel属性从简单的显示/隐藏场景中移动(如我所述)淡入/淡出动画。似乎每次我只想淡入/淡出某些内容时都必须创建自定义控件会有点过火。好吧,我猜你完蛋了,在残酷的MVVM世界中没有动画:)认真地说,检查我更新的答案。我希望这能有所帮助。不是每个人都有选择自己框架的权利。不管值不值得,我一直在使用MVVM Light应用程序。我的例子不是很好。我的ViewModel实际上并不包含UI信息,它反映了数据的不同状态。各种UI元素通过VM绑定到数据状态。对于简单的可见性来说,这很好。我面临的问题是如何将过渡动画集成到元素的可见性中,以使UI更加优雅。我尝试过XAML转换,但它们只在创建元素时播放一次。我不清楚如何通过可见性触发这些。是的,我理解你们面临的困难。对于以上所有内容,我还可以补充一点,如果您需要绑定元素查看VM中的数据状态,您可能会发现这很有用:。我认为您可以尝试在这里使用视觉状态下的故事板事件来集成合成动画,或者找到另一种方法。祝你好运