C# 开发人员在使用 WPF 之前应该知道啥 [关闭]

Posted

技术标签:

【中文标题】C# 开发人员在使用 WPF 之前应该知道啥 [关闭]【英文标题】:What should a C# developer know before using WPF [closed]C# 开发人员在使用 WPF 之前应该知道什么 [关闭] 【发布时间】:2011-05-11 06:45:01 【问题描述】:

我更像是系统管理员和网站管理员,而不是开发人员,但有时我会开发,包括主要使用 Winform(以及可选的 GTK+)的 C#。

几周前我开始了一个 WPF 项目,它看起来非常强大,但一开始我感觉就像一只找到了刀的母鸡!差别太大了!

*** 有很多类似的主题,我仔细阅读了一些类似的内容:

Hidden features of WPF and XAML? What all should an expert C#/.Net/WPF developer know?

但是,当有人从 Winform 开始使用 WPF 时,他必须注意哪些差异?

[编辑]

关于 LINQ with WPF 的一些建议/链接怎么样? WPF 导航的一些建议/链接怎么样?

【问题讨论】:

“我感觉自己就像一只捡到刀的母鸡!” - 很好的比喻:) @Coxy:在这种情况下,这是一个常见的法语表达的直译,是否有一些英语等价物? 如果我长期做winforms,我会加强/刷新XML知识。这也可能让您有宾至如归的感觉:tanveerbadar.wordpress.com/2007/04/23/… @ivo s:XML 对我来说不是问题,我在很多情况下都使用它:对于小型网站、小型软件等,我更喜欢它而不是数据库,而且 Xhtml 是 XML,所以我工作很多关于 XML、DTD 等,甚至 SGML 谁“有点”更复杂(恕我直言)。 - 嗯,很有趣的链接,谢谢! "a hen who found a knife" 哈哈,我一开始还以为哇他们也用英文……然后我看到你来自哪里! 【参考方案1】:

WPF 与其他系统完全不同。

我有几年的 WinForms、Win32 和 Web 编程经验,我相信我的 Web 编程经验对我的帮助最大。

至于书籍,来自 Adam Nathan 的“Windows Presentation Foundation Unleashed”,Sams Publishing 对我帮助很大。

【讨论】:

我完全同意网络编程经验。有助于学习WPF。为此 +1。【参考方案2】:

要开始使用 WPF,了解设计模式 Model View ViewModel (MVVM) 很重要。 我也推荐Adam Nathan WPF4 书。我觉得挺好的!

【讨论】:

同意。尽快学习它,否则你很快就会发现自己陷入了一个数千文件的意大利面条代码项目中,当你意识到 mvvm 确实是个好东西时,这是无法重构的。 一些链接,一些建议?因为 MVVM (VVMM?) 看起来非常神秘,即使有一些很好的解释,比如这里 wpftutorial.net @G。你是对的。我修好了。 您应该查看 Karl Shifflett 的 In the Box MVVM 培训:karlshifflett.wordpress.com/2010/11/07/… @Mamta Dalal:哇,很棒的链接,谢谢!【参考方案3】:

谢谢大家,但是这一切有点分散,所以我做了一个资源汇编并自己添加了一些东西,请告诉我你的想法(或改进,我做社区维基) em>

奇怪的是,没有人谈论过 LINQ,它似乎是这项技术的核心要素。

考虑到我失去的时间,另一件似乎很重要的事情是不要使用WPF navigation system,从我阅读的众多来源看来,它似乎无法正常工作。所以,使用导航框架似乎很重要,比如Magellan。

routed event system 似乎是 WPF 中值得关注的一个重要点,如果有人对此有一些有趣的资源,请添加到这篇文章中。

RTFM

Windows Presentation Foundation WPF Documentation Samples .NET Language-Integrated Query for XML Data .NET Framework Developer Center - LINQ

软件

In the Box – MVVM Training Caliburn Micro: A Micro-Framework for WPF, Silverlight and WP7

博文

sachabarber.net MVVM for Dummies Deep drive into WPF graphics internals Part 1 Building WPF Applications with the Page Navigation framework

视频

MVVM Design Pattern NDC2009

代码项目

Articles by Sacha Barber WPF: A Beginner's Guide Part 1 of n WPF: A Beginner's Guide Part 2 of n WPF: A Beginner's Guide Part 3 of n WPF: A Beginner's Guide Part 4 of n WPF: A Beginner's Guide Part 5 of n WPF: A Beginner's Guide Part 6 of n Magellan: An MVC-powered Navigation Framework for WPF

书籍:

Windows Presentation Foundation Unleashed (WPF) WPF 4 Unleashed(与先例相同,但针对 WPF4)

其他 Stack Overflow 主题

Hidden features of WPF and XAML? What all should an expert C#/.Net/WPF developer know? Questions every good .NET developer should be able to answer?

【讨论】:

“奇怪的是,没有人谈论过 LINQ,它似乎是这项技术的核心元素。”谁能提供有关此的更多详细信息? 很好的答案...【参考方案4】:

我同意 Arseny 的观点,学习 MVVM 是正确学习 WPF 的核心。它不是一个小众的东西——如果应用得当,它可以让你的代码更干净、更简单,并促进解耦和单元测试。

这里有一个很好的视频,它解释了概念和实现: Jonas Follesø explains the MVVM Design Pattern。在视频中,这个家伙正在谈论 Silverlight,但 WPF 中的实现几乎相同。

观看视频后,如果您对 WPF 的基础知识感到满意,那么您可以做的比采用框架来减轻您手上的繁重工作和管道工作要差得多。我强烈推荐Caliburn Micro。这将通过鼓励您使用 MVVM 引导您走上最佳实践的道路,但也会为您处理很多编码细节。该网站上的文档有点薄,但那里有许多教程正在稳步添加。

例如,在关注 MVVM 时,您通常会有一个 View(例如一个窗口)和 ViewModel(一个 C# 类)。如果您在视图上有一个包含订单号的文本框,那么您的 ViewModel 上就会有一个名为 OrderNumber 的相应属性。使用 WPF 绑定表达式:

<TextBox x:Name="OrderNumber" Text="Binding OrderNumber" />

文本框将绑定到 ViewModel 上的属性,以便当文本框或属性更改时,另一个会自动更新。使用像 Caliburn Micro 这样的框架,您不必编写任何绑定表达式,它使用基于约定的简单方法。在前面的示例中,如果您的文本框名为 OrderNumber,而您的 ViewModel 属性名为 OrderNumber,Caliburn 假定它们必须是相同的,并自动为您绑定它们。

<TextBox x:Name="OrderNumber" />

如上所述,您的 XAML 变得更加简单,让您可以专注于完成工作。我希望在我开始大量生产自己的 ViewModelBase 类、ViewLocaters 等之前早点找到这样的框架。

【讨论】:

【参考方案5】:

我还建议 Sacha Barber 的 blog 及其在 codeproject 中的所有 WPF 相关文章。这家伙太棒了!

【讨论】:

是的,+1(明天,抱歉):我用他的“WPF:初学者指南”(codeproject.com/KB/WPF/BeginWPF1.aspx, 2, 3, 4, 5...)盯着 WPF /跨度> 【参考方案6】:

Winforms/C# 开发人员应该知道/接受的最重要的事情是 WPF 与 winforms 非常不同,并且 Winforms 的做事方式不是 WPF 中正确的做事方式。

我见过很多 WinForms 开发人员使用events/delegatesthreads 来解决每一个问题,而不是使用Bindingcommandstriggers 等。

【讨论】:

+1 记住这一点非常好。 (我被指控有罪)

以上是关于C# 开发人员在使用 WPF 之前应该知道啥 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

wpf和winform(C#) 有啥区别吗

.Net可以走啥方向?在学校学了c#语言,出来找实习,发现c#的面试很难,该怎么办?

java的io流中,啥时候应该在流关闭之前加flush,啥时候不用

我应该学习啥来提高我的技能? [关闭]

现在都有wpf了,c++做应用还有啥优势

学习WPF你需要知道的优势