wpf - MVVM 中的条件逻辑与重复
问题描述
我们有一个包含其视图、视图模型和模型的模块,并且要求拥有该模块的精确副本,但部分功能必须是只读的。只读模式应通过配置参数打开。模型部分是相同的——它将使用相同的数据源。
我看到了这个问题的两种可能的解决方案:
通过基于参数操作控件的交互性来更改现有的视图和视图模型。这种方法的缺点是额外的条件逻辑。我们担心如果我们这样做,可能会出现另一个要求,我们必须添加更多的条件逻辑。上行 - 没有重复。
另一种方法是将现有视图拆分为多个组件,并使用这些组件组装常规模块版本和只读版本。我们可以在只读版本中禁用 View 级别的交互性,并从我们要拆分的 View 的 ViewModel 继承并覆盖所需的行为。好处是模块化。缺点 - 重复,将来添加新组件时需要维护多个位置。
解决此类问题的首选方法是什么?
解决方案
这比你想象的要简单一些。
最优雅的方法是在视图模型中包含一个标志或值,它表示数据的可编辑状态(这可能只是一个真/假标志,但我也看到了它可以表示为枚举的情况,因为有多个条件或状态)。
然后在视图中,您可以将控件IsEnabled
或IsReadOnly
属性绑定到该值(如有必要,使用转换器将值更改为布尔值)。
推荐阅读
- gnuplot - 如何增加直方图行堆栈样式中的条形间隙?
- sqlite - SQLite3 类缺失
- javascript - 如何通过 XMLHttpRequest 从 PHP 获取 MySQL 数据到 Javascript 并按时间顺序输出数据?
- python - 代码在本地主机上工作,但不在服务器上 - https://www.nseindia.com/api/equity-stockIndices?index=NIFTY%2050 - python
- regex - Flutter dart 使用正则表达式将字符串拆分为较小的组
- c# - API 中的哪里是 ApiName 的值,用于分配 IdentiyServer4 的授权?
- node.js - React API 调用状态永远挂起
- sorting - QGIS如何永久更改记录顺序?(对记录/特征进行永久排序并输出一个新的 shapefile)
- apache-spark - Spark 表和 Ranger Row 过滤
- javascript - 进行排序并加载更多系统(NodeJS 路由 + MySQL)