从 Windows 应用程序迁移到 WPF
开始 WPF 开发的思考准备。
引言
我必须说,WPF 是一种编程语言,其初始语法有些困难。我曾想知道这些绑定、路由最初到底在做什么?所有习惯于分层(多层)架构的 Windows 程序员都会想知道如何应对这些新概念。
但是,如果你开始结合 MVVM 设计模式来学习 WPF,那将是一件有趣的事情。它将业务层、数据层与视图分离开来。是的,这正是基本的三层架构概念的全部意义所在!!!看看 MVVM,人们很容易说它是为 WPF 量身定制的。
让我们尝试从 Windows .NET 2.0 迁移到 WPF 编程。我们将首先看到一个使用 .NET 2.0 开发的简单的员工管理系统。然后,我们将尝试使用 MVVM 设计模式来开发同一个系统。
回顾三层架构
在开发专业软件时,我们总是希望将 UI 与业务组件和数据分离开来。

我们通常在每个 UI 后面维护一个业务对象,该对象充当 UI 和模型之间的中介。业务对象严格遵循“模式和实践”来使应用程序可扩展。附加的源代码包含一个演示简单 Windows 应用程序的示例。它有一个简单的 Windows Form,带有两个 ComboBox
,一个用于选择雇主,另一个用于选择员工。选择员工姓名后,您可以看到他的详细信息。
转向 WPF
现在回到 WPF。我们的 UI 已经配备了绑定。然后我们总是有那些数据对象,它们在内存中保留可编辑的数据(数据库的内存表示)。现在我们可以将数据与 UI 绑定。绑定允许我们以双向方式更新数据。我们可以从数据更新 UI,也可以从 UI 更新数据。

让我们将上述 .NET 2.0 应用程序转换为 WPF。我们可以重用现有的数据层。所以我们有了数据。我们将开发 WPF 应用程序来显示信息。我们将遵循 MVVM 设计模式。我们有 XAML 作为视图(View)。我们有数据层作为模型(Model)。现在是将模型信息传递给视图的时候了。我们将设计一个层(ViewModel),它将模型封装起来,与视图隔离开。ViewModel 将充当视图的 DataContext
。我们将在 XAML 绑定中使用 DataContext
。所以当你从视图更新 ViewModel 时(由于绑定),ViewModel 将在内部更新模型。
因此,让我们从 MVVM(或 Josh Smith 的创意)中借鉴一些技巧来激发 WPF 编程。

上面的图表描绘了如何使用 MVVM 设计模式开发 WPF 应用程序的详细信息。本文讨论了使用 MVVM 开发 WPF 应用程序,所以让我们记住 MVVM 的一些准则。
MVVM 的事实标准
- XAML 没有代码隐藏 - 完全干净的视图设计
- ViewModel 应作为
DataContext
传递给 UI 视图 - ViewModel 和 Model 不应访问任何 UI/View 组件、对象
- ViewModel 应继承
INotifyPropertyChanged
。这是使 ViewModel 成为Binding
源的要求 - ViewModel 应封装 Model - 这隐藏了数据存储的复杂性,对 View 来说是透明的
您还可以参考以下链接来提升您的 WPF 技能
- MVVM 的起源 - Josh Smith 解释 MVVM [^]
- Josh Smith 关于转换器和 MVVM 的讨论 [^]
- AttachedCommandBehavior V2 aka ACB [^]
- 胖模型、瘦 ViewModel 和哑视图,最佳 MVVM 方法? [^]
- WPF 和 Silverlight 的复合应用程序指南 - 2009 年 2 月 [^]
历史
- 2009年5月21日:初始发布
- 2009年5月22日:小幅更新
- 2009年6月6日:包含了一个示例,演示了 .NET 2.0 应用程序及其 WPF 对等版本