什么是开始使用WPF而不是WinForms的最佳读数?

时间:2010-05-05 06:37:01

标签: c# wpf winforms mvvm

记住CannibalSmith曾经说过的话 - “所有的答案都说”WPF是不同的。“这是一个巨大的轻描淡写。你不仅需要学习很多新东西 - 你必须忘记从Forms中学到的一切。这是一种全新的UI方式。“

..并且拥有多年的可视Windows桌面应用程序开发经验(VB6,Borland C ++ Builder VCL,WinForms)(很难忘记),我如何快速转向开发以说明结构良好的WPF应用程序视觉工作室?

我不需要使用boozy-woozy图形来为我的应用程序提供好莱坞大片或百万美元睡衣的外观和感觉。我总是喜欢标准Windows常用控件和UI设计指南的整洁,最后我更喜欢Vista Glass Aero Graphite酱。

我对WinForms非常满意,但我希望我的应用程序能够使用最高效和最新的标准技术构建,并根据当前和未来最高效灵活的模式进行架构,并利用基于接口的集成和功能重用,并利用现代硬件和API的所有优势,以最大限度地提高性能,可用性,可靠性,可维护性,可扩展性等。

我非常喜欢分离视图,逻辑和数据的想法,让视图能够充分利用平台的所有优势(可以在瘦客户端上作为Web浏览器小程序运行,也可以在PC上作为桌面应用程序运行最新的GPU),让逻辑得到重复使用,并行化和无缝发展,将数据以结构良好的格式存储在正确的位置。

但是......从VB6迁移到Borland C ++ Builder非常容易(没有书籍/教程需要打开它并开始工作)(假设我已经知道C ++),从BCB转移到WinForms也是一样的,对我来说,如何处理WPF似乎并不明显。

那么我如何才能最好地将自己从WinForms开发人员转变为正确思考并做WPF开发人员?

5 个答案:

答案 0 :(得分:4)

答案 1 :(得分:2)

请记住,MVVM似乎只适用于单窗口应用程序。 我根据缺乏经验和一般建议潜入WPF,它将更好地安装一个自助服务终端项目,特别是客户给我的所有应用程序屏幕的photoshop图像的项目。拥有很酷的图形是这个项目的必要条件,我喜欢WPF与Web开发的模糊相似。

我发现了一些缺点

1)没有正式的MVVM工具包。它们中有很多都是由个人支持的。一年前,微软的一个工具包被放在了后面,而且没有VS2010的支持。

2)编写一个多窗口应用程序,一个简单的向后和向前的向导,是一个简单的噩梦。我通过一个干净的设计来定义每个UI操作的委托和每个业务操作的命令,但我仍然认为它过多地参与了一个框架以证明其合理性,并且您无法将测试结果显示给这位客户期待着兴奋。

3)你放弃双击按钮并添加一些代码的习惯。这留下了使用IDE反对其性质的唠叨感。基本上,您使用Visual Studio作为文本编辑器和界面设计器,仍然可以从该工具获得很大的帮助。

到目前为止,好处是:

1)定义可视组件非常灵活,快速和简单,您可以在VS和Expression Blend之间进行选择。动画很容易创建。

2)数据绑定简化了应用程序。您可以定义DataContext和绑定,而不必自己将数据从业务逻辑移动到接口,只要您拥有必须显示的所有内容的属性即可。

3)您可以将界面中的业务逻辑数量减少到零。将应用程序行为与外观分开很容易,因此您可以轻松地以十种不同的方式为界面设置外观,并在不打开窗口的情况下测试所有逻辑。

4)如果他们问你,你会打开一扇开门去Silverlight。

我的结论是,如果你有一个MDI应用程序,你可能会发现自己遇到了大麻烦。您应该知道,如果您选择WPF,那么您将为后代而努力,而不是乘坐可以快速轻松地到达那里的火车。没有确定的方法可以做,尤其是那些没有被演示覆盖的方法。

所有考虑的工具包都不是那么重要,而且每个工具包都能很好地为您服务。事实上,一些支持类已足以启动,并且没有花哨的向导,您可以遵循惯例。

一旦你理解了逻辑中涉及的内容,你甚至可以在几个小时后制作自己的。缺点是你必须真正理解它以自己的方式弯曲应用程序。

正如我上面所说,当我们点击按钮保持代码清洁时,我必须学习很多东西才能显示新视图。花点时间看the videos cited elsewere on StackOverflow它会节省你的时间。

答案 2 :(得分:1)

如果您正在寻找书籍,请查看以前的帖子

What WPF books would you recommend?

答案 3 :(得分:1)

今年进入WPF,对我来说最重要的是学习如何使用Model View View-Model模式将视图与app逻辑分开。作为一般的经验法则,如果您发现在视图背后的代码中放置了大量代码,那么您“做错了”。

我发现来自WinForms的背景我正在使用大量的事件处理程序并在我的代码中执行操作。当我熟悉MVVM和WPF功能时,我发现我能够删除大部分代码,并将其替换为绑定到视图模型的视图。

这篇来自Josh Smith的文章帮助我开始了MVVM路径:

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

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

My 2c - Donovan

答案 4 :(得分:1)