首页 > 解决方案 > MVVM 中的条件逻辑与重复

问题描述

我们有一个包含其视图、视图模型和模型的模块,并且要求拥有该模块的精确副本,但部分功能必须是只读的。只读模式应通过配置参数打开。模型部分是相同的——它将使用相同的数据源。

我看到了这个问题的两种可能的解决方案:

通过基于参数操作控件的交互性来更改现有的视图和视图模型。这种方法的缺点是额外的条件逻辑。我们担心如果我们这样做,可能会出现另一个要求,我们必须添加更多的条件逻辑。上行 - 没有重复。

另一种方法是将现有视图拆分为多个组件,并使用这些组件组装常规模块版本和只读版本。我们可以在只读版本中禁用 View 级别的交互性,并从我们要拆分的 View 的 ViewModel 继承并覆盖所需的行为。好处是模块化。缺点 - 重复,将来添加新组件时需要维护多个位置。

解决此类问题的首选方法是什么?

标签: wpfmvvmxamarin.forms

解决方案


这比你想象的要简单一些。

最优雅的方法是在视图模型中包含一个标志或值,它表示数据的可编辑状态(这可能只是一个真/假标志,但我也看到了它可以表示为枚举的情况,因为有多个条件或状态)。

然后在视图中,您可以将控件IsEnabledIsReadOnly属性绑定到该值(如有必要,使用转换器将值更改为布尔值)。


推荐阅读