我正在开发一个 WPF MVVM 应用程序。我注意到的是,我必须编写大量的样板代码来声明命令(通过 WPF 团队的 MVVM 工具包中的 DelegateCommands)、附加属性和附加行为。是否有任何策略可以减少我必须编写的样板代码量?
谢谢!
我正在开发一个 WPF MVVM 应用程序。我注意到的是,我必须编写大量的样板代码来声明命令(通过 WPF 团队的 MVVM 工具包中的 DelegateCommands)、附加属性和附加行为。是否有任何策略可以减少我必须编写的样板代码量?
谢谢!
就个人而言,我喜欢 Josh Smith 的MVVM Foundation 库。他使用了一个名为RelayCommand
there 的类,但它听起来与您DelegateCommand
在工具包中的非常相似。它允许您创建命令并通过 lambda 表达式传递CanExecute和Execute逻辑。这将有助于减少大量样板代码。
在他的博客中,Josh 还谈到了使用通用属性观察器来避免PropertyChanged
事件处理的一些混乱方面。这也值得研究。
老实说,许多所谓的“样板”代码正在为您的应用程序建立一个非常动态和灵活的基础。如果您正在制作一个小型且易于维护的应用程序,您可能会问自己:“我还需要在这里应用 MVVM 模式吗?” 另一方面,如果您正在制作一个生命周期较长且需要大量维护的大型应用程序,那么此样板代码将为您节省开支。
我发现我正在编写大量代码来通过 INotifyPropertyChanged 接口实现更改通知。为了减少这种情况,我发现了一个名为 PropertyChanged.Fody 的 NuGet 包,它使得将 INotifyPropertyChanged 添加到类属性非常简单。
以下是如何使用它;
using PropertyChanged;
[ImplementPropertyChanged]
public partial class Order
{
}
现在类中的任何公共属性都会有属性更改通知。这对于首先通过 DB 生成的 EF 类特别有用,因为您无法完全控制您的实体。
有关更多信息,请参阅GitHub。
我能想到的最明显的策略是使用代码片段和/或文件模板。它不会减少代码行数,但至少可以节省时间。
你可以自己制作它们(或者找到一些你可以直接导入到你的 Visual Studio 中)。
我个人使用 Laurent Bugnion 的 mvvm light 工具包,并使用他的代码片段/文件模板,它们确实为我节省了很多时间。我认为大多数流行的 mvvm 工具包都有类似的东西。
希望能帮助到你!