【问题标题】:Pure MVVM Without Code Behind没有代码的纯 MVVM
【发布时间】:2012-09-01 19:37:37
【问题描述】:

我对避免隐藏在代码中的方法感兴趣。 在我看来,有些情况下代码必须放在代码后面。 例如:我有一个未定义列数的网格。无法绑定列。所以最简单的方法是在后面的代码中生成列。

对于这种情况,我可以创建一个继承自网格的新类。这个新类具有用于列绑定的新绑定属性和代码。代码在可在 XAML 中使用的自定义类中分离。然后,我可以轻松地将列绑定到我新创建的属性。而且视图后面没有代码。

这是个好主意吗?您将如何解决此类(或类似)问题? 有没有其他方法可以从后面的代码中提取代码?

谢谢。

【问题讨论】:

  • 您应该使用使任务变得简单的任何工具。写代码一点问题都没有……说真的。
  • 在我看来.. 它是!当我决定使用 MVVM 时,我不想混用。只有代码后面......或只有 mvvm.. 但没有混合。我认为这很重要。
  • 为什么你认为这很重要?
  • 代码隐藏有它的用途,你知道的。 MVVM 并不意味着没有代码隐藏。这意味着从代码隐藏中删除不应该存在的代码。
  • “70% 的视图模型和 30% 的代码在它背后的代码让你很难进入应用程序。” - 对我来说听起来像是一个不知情的假设。我阅读代码没有问题,任何软件开发人员都不应该。 MVVM 是将表示与逻辑分离。这并不意味着逻辑完全消失。这一切听起来很教条。每种情况都不同,您尽最大努力根据自己的要求创建可维护的应用程序。

标签: mvvm


【解决方案1】:

在免费 xaml.cs 后面有一个代码并将代码转移到一个新类并不意味着它的纯 MVVM。这个想法是您将拥有 ViewModel 中的所有逻辑,因此免费 View 背后的代码有助于单元测试。查看特定逻辑(如颜色和动画)无法进行单元测试,因此它位于自定义控件或继承控件中或直接在 xaml.cs 中都无关紧要。只要您通过 UnitTesting 测试大部分用户交互和视图逻辑,您就应该为自己做得很好而感到高兴。

【讨论】:

  • 是的,我知道。但是我认为当您为特定目的扩展控件时,您将获得更好的 MVVM 支持。 (例如列绑定的附加属性)。你可以直接绑定到这个。如果您有一个大视野并且必须编写大量代码隐藏(例如,由于列绑定等一些限制),则代码将不可读。 (我不反对必须在代码后面编写的代码。我只是认为它必须是一个更好的解决方案。控制扩展或其他一些“模式”可以更好地处理此代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2011-01-18
  • 2020-10-14
  • 2010-10-30
  • 2020-06-01
  • 2020-04-17
  • 2011-05-09
相关资源
最近更新 更多