缩减MVVM WPF应用程序中的样板代码,以处理附加属性、命令等?

11

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

谢谢!


1
请给我们举一个您认为是“样板文件”的例子。一个人的样板文件可能是另一个人的业务逻辑。 - Anderson Imes
我使用代码片段来创建它们。这些代码片段会创建 #regions,因此我不必查看所有内容。 - 15ee8f99-57ff-4f92-890c-b56153
3个回答

11

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

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

说实话,很多所谓的“样板”代码都是为您的应用程序建立一个非常动态和灵活的基础。如果您正在制作一个小型、易于维护的应用程序,您可能会问自己,“我甚至需要在这里应用MVVM模式吗?”如果另一方面,您正在制作一个寿命长、需要大量维护的大型应用程序,那么这些样板代码将在以后为您省下很多麻烦。


2
博客文章链接:https://joshsmithonwpf.wordpress.com/2009/07/11/one-way-to-avoid-messy-propertychanged-event-handling/ - Lea Hayes

3
我发现我写了很多代码来通过INotifyPropertyChanged接口实现更改通知。为了减少这种情况,我找到了一个名为PropertyChanged.Fody的NuGet包,它使将INotifyPropertyChanged添加到类属性变得非常简单。
以下是使用方法;
using PropertyChanged;

[ImplementPropertyChanged]
public partial class Order
{
}

现在,类中的任何公共属性都将具有属性更改通知。这对于通过DB first生成的EF类特别有用,因为您无法完全控制实体。
有关更多信息,请参见GitHub

2
我能想到的最明显的策略是使用代码片段和/或文件模板。这并不能减少代码行数,但至少可以节省时间。
您可以自己制作(或找到一些可以直接导入到您的 Visual Studio 中的模板)。
我个人使用 Laurent Bugnion 的 mvvm light 工具包,并使用他的代码片段/文件模板,它们确实为我节省了很多时间。我认为大多数流行的 mvvm 工具包都有类似的东西。
希望这有所帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接