使用Windows Forms技能编程Silverlight/WPF

3
在多大程度上可以用Windows Forms技能来编写Silverlight/WPF程序?
在开发内部应用程序时,采用类似Windows Forms的风格是否可行?
我提出这个问题的背景是,我申请的职位需要使用Silverlight,我试图证明我的Windows Forms经验对于内部应用程序应该是足够的。
我知道Silverlight/WPF提供了更多功能,但主要用于网页式的“花哨”设计,以及通过MVVM模式实现更高的SoC。

是的,但是你的竞争对手实际上了解Silverlight。所以他们几乎肯定在获得这份工作方面会比你有巨大的优势。如果你想要使用Silverlight工作,我强烈建议你开始学习Silverlight(或WPF,无论哪个)。 - Matt Greer
@Matt 不仅是竞争对手,而且是同事。除非每个项目都是独立完成的,否则如果你们拥有相似的知识基础,与他人合作会更加容易。 - Raumornie
@Matt - 我认为大多数.NET开发人员都会做ASP.NET,而不是Windows Forms /WPF /Silverlight? - Olav
5个回答

3
是的,您绝对可以开始使用WPF/SL,您的WinForms经验将会有所帮助,但我不同意它足够了。有趣的是,目前在WPF中工作的大多数开发人员都来自于WinForms背景(根据我的经验),他们大多认为WPF与WinForms并没有太大区别,并试图应用相同的问题解决技巧、概念和方法来开发WPF应用程序;这也是问题产生的原因所在。
我建议您先阅读一本WPF/SL书籍(至少前半部分),然后在您开发WPF/SL应用程序时,尝试使用新的概念(如XAML、Binding、Commands、DependencyProperty、Styles、Triggers等)来解决您遇到的每个问题(即使您可以轻松地使用旧方法解决/实现它)。有些人可能不同意这一点,但我见过我的朋友们几乎用WinForms的方式来实现所有事情(在WPF中),后来抱怨内存泄漏、性能等问题。

我同意……对于SL,我推荐《Silverlight 4权威指南》……它在很多方面改变了我的编码方式。 - basarat
在我看来,如果你试图以纯粹的MVVM方式解决所有问题,你会获得很多好的经验,但最终会得出结论:用纯粹的MVVM风格做所有事情比它值得的麻烦多了。MVVM是某些问题的相当不错的解决方案;对于其他问题,它也是一个相当好的反模式,这主要是由于微软工具集仍有很多需要改进的地方。但遵循这个建议将让你了解MVVM适用和不适用的地方,尽管它会使你的第一个项目非常缓慢。 - Ken Smith
@Ken - 我同意你关于MVVM的看法;例如,如果您正在创建自定义控件,则通常不会使用MVVM。我不确定您是否认为我在吹嘘使用MVVM,但事实上,在我的回答中根本没有建议使用MVVM,MVVM是WPF/SL应用程序的一个很好的模式,但对于从WinForms背景来的人来说,这不是首要学习/专业知识的东西。 - akjoshi
我想我在我的回答中过分解释了MVVM的含义。你是对的,有很多WPF/SL特定的东西并没有真正涉及到MVVM作为一种模式。无论如何,我的经验告诉我,现在XAML的做法被过度炒作了。用XAML的方式解决了某些问题,但也引入了许多新问题。典型的例子:我刚刚重构了一个大项目。VS清楚地告诉我C#代码中所有的问题,但完全让我看不到XAML中的数据绑定问题。唉。 - Ken Smith

3
如果我正在组建一个项目,并且有人告诉我他因为具有广泛的WinForms经验就可以成为一个优秀的WPF开发者,那么他被回电的可能性很低。尤其是如果他说什么WPF提供的东西“基本上是用于网页样式的'花哨'东西”。
这告诉我:“我已经了解了你使用的技术并且没有经验,但这不妨碍我对它形成观点,而这些观点你将不得不改变。”

我正在考虑一些小型的内部项目,需要大量进行CRUD操作,而且不需要外观很漂亮。我不知道我看到的广告是否适用于这种类型的项目。 - Olav
1
嗯,你看,你又认为 WPF 的重点在于它的外观。你的评论只会加强我对你的态度会给我的项目带来麻烦的印象。WPF 的重点在于它使 UI 应用程序的架构合理化。它撤销了 WinForms 模式和实践对世界造成的巨大伤害。如果你愿意学习,这是有趣的东西。向这种开放性迈出的第一步是承认你不知道的事情。 - Robert Rossney

2
我会说,如果您有丰富的WinForms经验,您应该能够很容易地转移到SL/WPF;尽管如此,我不会说您目前能够开发SL/WPF应用程序,除非您至少具备对XAML、依赖属性和这些平台的其他特性的基本理解。

我建议您查看Pete Brown的帖子 "10 things Beginning Silverlight and WPF Developers Need to Know",以获得一些开始的想法。我还建议阅读他的书,Silverlight 4 in Action,从基础开始构建这些技能。


1
我认为,独立开发应用程序和作为一个熟悉 Silverlight/WPF 的团队的一部分工作之间存在很大的差异。确实,您可以使用拖放设计 UI,使用可视化设计器分配属性,然后在基于 XAML 的框架中编写所有所需的代码,并几乎不会注意到它与您习惯的 Winforms 经验之间的区别。毫无疑问,与熟悉 WPF/Silverlight 世界中已成为标准的所有概念和模式的其他人一起工作的过程肯定会有所不同:绑定、命令、样式、依赖属性等。如果您的工作需要与他们集成,如果您忽略了这两个平台的差异,您将遇到问题。
这并不意味着 Winforms 经验是无用的。所有逻辑仍然存在,仍然需要编写相同的服务器端代码,并且可能还有半打其他地方,您正在处理的UI类型根本无关紧要。也许学习Silverlight或WPF的最佳方法是有一个真正的项目来熟悉其中的一些新思想,并将其与您习惯的一些相同逻辑结合起来。
很多问题归根结底取决于程序员的质量,而不是你所拥有的经验。当然,如果我想要找一个维护现有WPF应用程序的人,我会想要一个有这种经验的程序员,但如果我正在寻找开发新应用程序或组建一个全新团队,我很乐意接受写出良好Winforms代码并愿意学习新范例的人。
认为在大多数需要Silverlight/WPF程序员的情况下,Winforms经验就足够了是错误的,就像需要有经验的C#程序员时,C++经验也不足够一样。在概念上存在足够的差异,你需要至少表现出愿意进行范例转换,并且可能需要熟悉新技术核心概念。话虽如此,好的代码就是好的代码,我认为没有人应该仅因缺乏特定技术经验而被驳回。

0

不可避免地,你的第一个 WPF 应用程序会像 WinForms 应用程序一样。就我而言,这样做是可以接受的。但是如果有人发现你制作了一个30个对话框应用程序而没有使用 MVVM,他们可能会杀了你 :)
无论如何...你已经有了第一个 WPF 项目要完成...你很可能最终会像 WinForms 一样编码(以代码为主)。


1
我同意Basarat的观点,即“你最终可能会像WinForms一样编写代码”,但请发誓不要这样做,只有这样才能真正理解WPF的强大之处并加以利用。 - akjoshi

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