我更像是一个系统管理员和一个网站管理员,而不是开发人员,但有时我开发,包括主要使用Winform(以及可选的GTK +)的C#。
几个星期前我开始了一个WPF项目,看起来非常强大,但一开始我觉得自己像一只母鸡找到了一把刀!有很多区别!
stackoverflow充斥着类似这样的话题,我仔细阅读了一些类似的话:
但是,当有人从Winform开始使用WPF时,他必须注意哪些不同之处?
[编辑]
答案 0 :(得分:14)
WPF与其他系统完全不同。
我有几年的WinForms,Win32和Web编程经验,我相信我的网络编程经验帮助最大。
至于Adam Nathan的书籍“Windows Presentation Foundation Unleashed”,Sams Publishing对我帮助很大。
答案 1 :(得分:8)
开始使用WPF设计模式Model View ViewModel (MVVM)非常重要。 我也会推荐Adam Nathan WPF4本书。我认为这很棒!
答案 2 :(得分:7)
谢谢大家,但所有这些都有点分散,所以我做了一个资源编译并自己添加了一些东西,请告诉我你的想法(或改进,我做社区维基)
奇怪的是,没有人谈到LINQ,这似乎是这项技术的核心要素。
考虑到我失去的时间,另一件看起来很重要的事情就是不要使用WPF navigation system,这似乎从我读过的众多来源中看不起。因此,使用导航框架似乎很重要,例如Magellan。
routed event system似乎是WPF中的重点,如果有人有一些有趣的资源,请添加到这篇文章。
<强> RTFM 强>
<强>软件强>
博客帖子
<强>画强>
代码项目
<强>书籍:强>
其他Stack Overflow主题
答案 3 :(得分: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等之前,我已经找到了这样的框架。
答案 4 :(得分:3)
我还在blog建议了Sacha Barber的codeproject及其所有与WPF相关的文章。这家伙摇滚!
答案 5 :(得分:3)
Winforms / C#开发人员应该知道/接受的最重要的事情是WPF与winforms非常不同,而且 Winforms的做事方式不是在WPF中做事的正确方法。
我见过很多WinForms开发人员使用events
/ delegates
和threads
来解决每个问题,而不是使用Binding
,commands
,triggers
等。