c# - 视觉效果应该在 View 还是 ViewModel 中实现?

标签 c# xamarin mvvm xamarin.forms viewmodel

我正在使用 Xamarin.Forms 和 FreshMVVM 作为架构开发我的第一个应用程序,但在理解 MVVM 时仍然遇到一些麻烦,更具体地说,应该在 View 中还是在 ViewModel 中处理动画?
我知道对于需要使用模型的事件, View 和其他与 UI 不严格相关的东西之间的转换是在 ViewModel 中通过绑定(bind)和命令处理的。但是 ViewModel 是否处理所有事件?如果事件只修改 UI 的外观怎么办?
例如,在按下按钮时更改按钮的背景颜色,在这种情况下,背景颜色应该在 View 的代码隐藏或 View 模型的命令中的 Clicked() 事件中更改?
或者,如果我想在 View 消失时制作动画,我应该在 View 的代码隐藏或 ViewModel 中的 OnDisappearing() 事件中实现它吗?

我试图找到答案,但我无法将他们的 MVVM 解释外推到这个特定场景,所以我很感激解释。
就是这样,谢谢大家的时间。

最佳答案

MVVM 模式的大部分内容都可以解释。

在大多数项目中,在 ViewModel 和 View 行为之间执行严格的工作划分所花费的时间可能会损害时间尺度。

就我个人而言,我确保所有业务逻辑都严格保存在 ViewModel 和 Model 中,目的是即使 UI 被代码替换,系统仍然可以正常工作。

我尝试保留尽可能多的 UI 内容,包括 View 中的动画,这可能意味着在后面的代码中放入大量代码以支持它。不要忘记,这可能还包括仅由 XAML 使用的代码库,例如值转换器,例如使用 ViewModel 中的 bool 属性来切换 View 的背景颜色。

有时您可能只需要让 ViewModel 操作一些数据,以便 View 可以呈现它。

务实地,我认为这是可以接受的,但 ViewModel 永远不应该直接引用 UI 控件,只应该呈现数据。

在 UI 中触发动画或事件的情况下,我个人对拥有用于此目的的 ViewModel 属性没有任何问题,尽管有些人可能会反对。

在您提到的示例中,我认为所有这些都可以在后面的代码中执行,或者在 xaml 中使用转换器。

关于c# - 视觉效果应该在 View 还是 ViewModel 中实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60954127/

相关文章:

c# - 非法尝试使用文本/字节主机变量 - 插入文本列

android - 如何在 Android 上创建两行 TextView?

c# - Xamarin.iOS 与第三方框架绑定(bind)

asp.net-mvc - MVC 和 MVVM 有什么区别和相似之处?

c# - 在代码隐藏中将参数传递给 RelayCommand

C#导出为Excel格式

c# - 在 Xamarin.Forms 项目中实现 MVVM

c# - WPF如何将ComboBoxes选定项目用作xctk :PropertyGrid's SelectedObject in MVVM

c# - MVVM 光 5.0 : How to use the Navigation service

c# - 避免 LINQ 中的重复