使用WPF而不是WinForms,最好的入门读物是什么?

9
记住 CannibalSmith 曾经说过的一句话——“所有的答案都在说‘WPF是不同的’。这是一个巨大的低估。你不仅需要学习许多新的东西,而且还必须忘记从Forms中所学到的一切。这是完全不同的UI设计方式。”
考虑到我有多年的视觉Windows桌面应用程序开发经验(VB6,Borland C++ Builder VCL,WinForms)(很难忘记),那么我该如何快速转向使用Visual Studio开发良好的WPF应用程序呢?
我不需要华丽的图形来给我的应用程序带来好莱坞大片或百万美元睡衣的外观和感觉。我总是喜欢标准Windows公共控件和UI设计指南的整洁程度,尤其是在Vista Glass Aero Graphite酱下的体验更加愉悦。
我对WinForms非常满意,但我希望我的应用程序基于最高效和最新的标准技术构建,并根据今天和明天最有效和灵活的模式进行架构设计,利用基于接口的集成和功能重用,以及利用现代硬件和API的所有优势来最大化性能、可用性、可靠性、可维护性、可扩展性等方面的优势。
我非常喜欢将视图、逻辑和数据分离的思想,让视图充分利用平台的优势(无论是在薄客户端上作为Web浏览器应用程序运行还是在带有最新GPU的PC上作为桌面应用程序运行),让逻辑被重用、并行化和无缝演变,在正确的位置存储结构良好的数据。
但是... 从VB6转到Borland C++ Builder非常容易(不需要书籍/教程即可启动并开始工作)(假设我已经了解了C++),从BCB转到WinForms也是同样无缝的,但我似乎不知道如何使用WPF。
那么,我该如何才能从WinForms开发人员成功转型为正确思考和实践WPF开发人员呢?

1
+1 不仅是一个有趣的问题,而且写得非常好。 - Simon Chadwick
5个回答


2
请注意,MVVM似乎仅适用于单窗口应用程序。我根据经验不足和一般推荐进入了WPF,认为它更适合信息亭项目,尤其是客户已经给出应用程序所有屏幕的Photoshop图像。这个项目需要很酷的图形,我喜欢WPF与Web开发的模糊相似之处。
我发现了一些缺点:
1)没有官方的MVVM工具包。有许多工具包,都由个人支持。微软一年前推出的工具包已经被搁置了,没有VS2010支持。
2)编写一个多窗口应用程序,类似于简单的向导,有前进和后退功能,是非常困难的。我通过定义每个UI操作的委托和每个业务操作的命令来进行干净的设计,但我认为这太过依赖框架,不能令客户期待兴奋地展示您的测试结果。
3)您放弃了双击按钮并添加一些代码的习惯。这会让人感到使用IDE违反了其本质。基本上,您使用Visual Studio作为文本编辑器和界面设计师,并从该工具的大力帮助中获得帮助。
优点如下:
1)定义可视化组件非常灵活,快捷且易于选择VS和Expression Blend。动画很容易创建。
2)数据绑定简化了应用程序。您定义一个DataContext和绑定,不必自己从业务逻辑中移动数据到接口,只要有每个必须显示的属性即可。
3)您可以将接口中的业务逻辑减少到零。轻松分离应用程序行为和外观,因此您可以以少量的工作量将您的界面设计为10种不同的方式,并在不打开窗口的情况下测试所有逻辑。
4)如果他们要求,您留下了使用Silverlight的机会。
我的结论是,如果您有一个MDI应用程序,您可能会发现自己遇到大麻烦。您应该知道,如果选择WPF,则是在为未来的一代铺路,而不是乘坐可以快速轻松地到达目的地的火车。没有建立的做事方式,特别是那些没有演示涵盖的事情。
考虑所有问题后,工具包并不是那么重要,每个工具包都能为您服务。实际上,几个支持类就足以开始,没有花哨的向导,您需要遵循惯例。
你甚至可以自己制作几个小时,一旦你理解了逻辑涉及的内容。缺点是你必须真正了解它,并将其弯曲为自己的方式。

如我所说,为了在用户点击按钮时展示新视图并保持代码整洁,我不得不学习很多东西。花点时间观看StackOverflow上其他地方引用的视频,这将节省你的时间。


1

1

今年我开始接触WPF,对我来说最重要的是学习如何使用模型视图视图模型(MVVM)模式将视图与应用程序逻辑分离。一般而言,如果您发现在视图的代码后面放置了大量代码,则“做错了”。

我发现,由于我的WinForms背景,我经常在代码后面添加事件处理程序并执行其他操作。随着我熟悉MVVM和WPF功能,我发现我能够删除大部分代码,并将其替换为视图绑定到视图模型。

正是像Josh Smith这样的文章帮助我开始了MVVM之路:

http://www.codeproject.com/KB/WPF/TreeViewWithViewModel.aspx

一旦您开始掌握显示数据视图MVVM绑定的技巧,请查看命令和特别是ICommand接口。它们是用户操作触发执行操作的主要机制。因此,与其为按钮设置OnClick处理程序,不如将XAML中按钮的Command属性绑定到视图模型中公开ICommand实现的属性。
我的2分钱 - Donovan

1

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