【问题标题】:Reducing boilerplate code in MVVM WPF app for attached properties, commands, etc?减少 MVVM WPF 应用程序中附加属性、命令等的样板代码?
【发布时间】:2009-08-11 16:08:01
【问题描述】:

我正在开发 WPF MVVM 应用程序。我注意到的是,我必须编写大量的样板代码来声明命令(通过 WPF 团队的 MVVM 工具包中的 DelegateCommands)、附加属性和附加行为。是否有任何策略可以减少我必须编写的样板代码量?

谢谢!

【问题讨论】:

  • 给我们一个你认为“样板”的例子。一个人的样板是另一个人的业务逻辑。
  • 我使用 sn-ps 创建它们。 sn-ps 创建#regions,所以我不必全部查看。

标签: c# wpf mvvm attached-properties attachedbehaviors


【解决方案1】:

就个人而言,我喜欢 Josh Smith 的MVVM Foundation library。他在那里使用了一个名为RelayCommand 的类,但它听起来与工具包中的DelegateCommand 非常相似。它允许您创建命令并通过 lambda 表达式传递 CanExecuteExecute 逻辑。这将有助于减少大量样板代码。

his blog 中,Josh 还谈到了使用通用属性观察器来避免PropertyChanged 事件处理的一些混乱方面。这也值得研究。

老实说,许多所谓的“样板”代码正在为您的应用程序建立一个非常动态和灵活的基础。如果您正在制作一个易于维护的小型应用程序,您可能会问自己,“我是否还需要在这里应用 MVVM 模式?”另一方面,如果您正在制作一个更大的应用程序,将有很长的使用寿命并且需要大量的维护,那么这个样板代码将会为您节省时间。

【讨论】:

【解决方案2】:

我发现我正在编写大量代码来通过 INotifyPropertyChanged 接口实现更改通知。为了减少这种情况,我发现了一个名为 PropertyChanged.Fody 的 NuGet 包,它使得将 INotifyPropertyChanged 添加到类属性非常简单。

这里是如何使用它;

using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}

现在类中的任何公共属性都会收到属性更改通知。这对于首先通过 DB 生成的 EF 类特别有用,因为您无法完全控制实体。

更多信息请参见GitHub

【讨论】:

    【解决方案3】:

    我能想到的最明显的策略是使用代码 sn-ps 和/或文件模板。它不会减少代码行数,但至少可以节省时间。

    您可以自己制作它们(或者找到一些可以直接导入到您的 Visual Studio 中)。

    我个人使用 Laurent Bugnion 的 mvvm light 工具包和他的 code-sn-ps/file 模板,它们确实为我节省了很多时间。我认为大多数流行的 mvvm 工具包都有类似的东西。

    希望对你有帮助!

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多