我正在使用Xamarin开发我的第一个应用程序。Forms和FreshMVVM作为体系结构,我在理解MVVM时仍然遇到一些困难,更具体地说,在视图或ViewModel中应该在哪里处理动画?。我知道,对于需要使用模型的事件,视图和其他与UI不严格相关的东西之间的转换是通过绑定和命令在ViewModel中处理的。但是ViewModel处理所有事件吗?如果事件只修改UI的外观会怎样?。例如,在按下按钮时更改按钮的BackgroundColor,在这种情况下,应该在视图代码后面的Clicked((事件中或在ViewModel?或者,如果我想在视图消失时制作动画,我应该在视图代码后面的OnDisappearing((事件中实现它,还是在ViewModel中实现它?
我试图找到一个答案,但我无法将他们对MVVM的解释外推到这个特定的场景中,所以我很感激他们的解释。仅此而已,谢谢大家抽出时间。
MVVM模式的大部分内容都可以进行解释。
在大多数项目中,强制在ViewModel和View行为之间严格划分工作所花费的时间可能会对时间尺度不利。
就我个人而言,我确保所有的业务逻辑都严格保存在ViewModel和Model中,目的是即使UI被代码替换,系统也应该仍然工作。
我尽量保留尽可能多的UI内容,包括视图中的动画,这可能意味着要在代码后面放入相当多的代码来支持它。别忘了,这可能还包括仅由XAML使用的代码库,例如值转换器,比如在ViewModel中使用布尔属性来切换视图的背景色。
有时,尽管您可能需要让ViewModel只处理一些数据,以便视图能够显示它。
实际上,我认为这是可以接受的,但ViewModel不应该直接引用UI控件,而应该只显示数据。
在UI中触发动画或事件的情况下,我个人对用于此目的的ViewModel属性没有问题,尽管有些人可能会提出不同的意见。
在您提到的示例中,我认为这一切都可以在代码背后执行,也可以使用xaml中的转换器执行。
MVVM用于帮助我们维护干净的代码,并将业务逻辑与UI分离。
尽可能多地保留要查看的UI,除非它依赖或指示业务逻辑值。
来到查询中提到的场景。
BackgroundColor change on button click=>例如,如果颜色指示业务逻辑中的值,如Value < 0
,则使用转换器将Value
绑定到BackgroundColor
。但若它和业务逻辑无关,最好在代码隐藏文件中编写颜色更改代码。
页面上的动画消失=>据我所知,导航动画不可能依赖于业务逻辑。因此,最好将其保存在代码中。
任何查询的注释。。。