视觉效果应该在 View 还是 ViewModel 中实现?
Should visual effects be implemented in the View or ViewModel?
我正在使用 Xamarin.Forms 和 FreshMVVM 作为架构开发我的第一个应用程序,但在理解 MVVM 时我仍然遇到一些问题,更具体地说,应该在 View 还是 ViewModel 中处理动画? .
我知道对于需要使用模型的事件,视图和与 UI 不严格相关的其他内容之间的转换是在 ViewModel 中使用绑定和命令处理的。但是 ViewModel 会处理所有事件吗?如果事件仅修改 UI 的外观怎么办?。
例如,在按下按钮时更改按钮的 BackgroundColor,在这种情况下,应该在视图的代码隐藏或 ViewModel 的命令中的 Clicked() 事件中更改 backgroundColor?
或者,如果我想在视图消失时制作动画,我应该在视图代码隐藏的 OnDisappearing() 事件中或在 ViewModel 中实现它吗?
我试图找到答案,但我无法将他们的 MVVM 解释外推到这个特定场景,所以我希望得到解释。
就这些了,谢谢大家的宝贵时间。
许多 MVVM 模式都可以解释。
在大多数项目中,在 ViewModel 和 View 行为之间执行严格的工作划分所花费的时间可能对时间尺度不利。
就个人而言,我确保所有业务逻辑都严格保留在 ViewModel 和模型中,目的是即使 UI 被代码替换,系统仍应正常工作。
我尝试保留尽可能多的 UI 东西,包括视图中的动画,这可能意味着将相当多的代码放入后面的代码中以支持它。不要忘记,这可能还包括仅由 XAML 使用的代码库,例如值转换器,例如在 ViewModel 中使用布尔值 属性 来切换视图的背景颜色。
虽然有时您可能需要让 ViewModel 仅操作一些数据,以便 View 可以呈现它。
我认为,从实用的角度来说,这是可以接受的,但 ViewModel 不应直接引用 UI 控件,而应仅显示数据。
在 UI 中触发动画或事件的情况下,我个人认为使用用于此目的的 ViewModel 属性 没有问题,尽管有些人可能会提出不同意见。
在您提到的示例中,我认为都可以在后面的代码中执行或在 xaml 中使用转换器。
MVVM 用于帮助我们维护干净的代码并将业务逻辑与 UI 分离。
尽可能将 UI 保留为查看,除非它取决于或指示业务逻辑值。
来到查询中提到的场景。
单击按钮时背景颜色发生变化 => 例如,如果颜色表示业务逻辑中的值,如 Value < 0
,则将 Value
绑定到 BackgroundColor
使用转换器。但如果与业务逻辑无关,最好将变色代码写在代码隐藏文件中。
页面动画消失 => 据我所知,导航动画不可能依赖于业务逻辑。因此最好将它保存在代码中。
评论任何问题...
我正在使用 Xamarin.Forms 和 FreshMVVM 作为架构开发我的第一个应用程序,但在理解 MVVM 时我仍然遇到一些问题,更具体地说,应该在 View 还是 ViewModel 中处理动画? . 我知道对于需要使用模型的事件,视图和与 UI 不严格相关的其他内容之间的转换是在 ViewModel 中使用绑定和命令处理的。但是 ViewModel 会处理所有事件吗?如果事件仅修改 UI 的外观怎么办?。 例如,在按下按钮时更改按钮的 BackgroundColor,在这种情况下,应该在视图的代码隐藏或 ViewModel 的命令中的 Clicked() 事件中更改 backgroundColor? 或者,如果我想在视图消失时制作动画,我应该在视图代码隐藏的 OnDisappearing() 事件中或在 ViewModel 中实现它吗?
我试图找到答案,但我无法将他们的 MVVM 解释外推到这个特定场景,所以我希望得到解释。 就这些了,谢谢大家的宝贵时间。
许多 MVVM 模式都可以解释。
在大多数项目中,在 ViewModel 和 View 行为之间执行严格的工作划分所花费的时间可能对时间尺度不利。
就个人而言,我确保所有业务逻辑都严格保留在 ViewModel 和模型中,目的是即使 UI 被代码替换,系统仍应正常工作。
我尝试保留尽可能多的 UI 东西,包括视图中的动画,这可能意味着将相当多的代码放入后面的代码中以支持它。不要忘记,这可能还包括仅由 XAML 使用的代码库,例如值转换器,例如在 ViewModel 中使用布尔值 属性 来切换视图的背景颜色。
虽然有时您可能需要让 ViewModel 仅操作一些数据,以便 View 可以呈现它。
我认为,从实用的角度来说,这是可以接受的,但 ViewModel 不应直接引用 UI 控件,而应仅显示数据。
在 UI 中触发动画或事件的情况下,我个人认为使用用于此目的的 ViewModel 属性 没有问题,尽管有些人可能会提出不同意见。
在您提到的示例中,我认为都可以在后面的代码中执行或在 xaml 中使用转换器。
MVVM 用于帮助我们维护干净的代码并将业务逻辑与 UI 分离。
尽可能将 UI 保留为查看,除非它取决于或指示业务逻辑值。
来到查询中提到的场景。
单击按钮时背景颜色发生变化 => 例如,如果颜色表示业务逻辑中的值,如 Value < 0
,则将 Value
绑定到 BackgroundColor
使用转换器。但如果与业务逻辑无关,最好将变色代码写在代码隐藏文件中。
页面动画消失 => 据我所知,导航动画不可能依赖于业务逻辑。因此最好将它保存在代码中。
评论任何问题...