WPF学习曲线有多糟糕?

我已经从几个人那里听说过, WPF的学习曲线非常陡峭(取决于你的知识或经验)。 看起来像大多数人可以让演示或启动项目工作,然后发现自己被困在一些杂项问题的时间长度。 我很好奇什么是特别难以学习或理解(图层,SDK, XAML ,数据绑定等),如果您有任何build议如何避免/减轻一些这些困难的话题?

WPF是不同的; 有没有摆脱这一点。

我的主要build议是不要害怕XAML; 拥抱它,那就是力量所在!

让我解释:-

为了提高生产力,我更喜欢在文本视图中编写XAML,因为我可以在几个按键中创build窗口的布局。 如果你经常input代码,那么这是一个非常快速的开发窗口的方法。 然后你可以使用Visual编辑器使它看起来很漂亮。

如果你始终认为XAML的每个元素都将“ new ”该对象,并且该XAML元素的每个属性都是该对象的属性,那么可以将XAML视为对象创build和属性分配。 非常类似于编写代码。

如果你花费太多的时间在视觉devise师那么你不明白这一点,对于一些这将减慢学习曲线。

最近的Hanselminutes播客可能会让你感兴趣。

我还强烈build议尽早学习Views和View-Models的概念,即使您没有订阅CompositeWPF的一部分,因为这确实有帮助。

有一篇来自Karsten Januszewski的文章,名为“ 击中曲线:在WPF和生产力上”,您可能会感兴趣:

让我们清楚:WPF带有曲线。 现在我已经看了一大堆开发人员碰到这种情况。 曲线陡峭。 我们正在讨论两周到两个月的曲线,取决于开发者和开发者的经验/直觉水平。 将会有完全神秘的时刻和充足的照明时刻。 如果开发者喜欢发现一个深入深思熟虑的UI平台,那么这种做法既痛苦又愉快。 它是一个既熟悉又陌生的人。 与其他UI开发范例有许多相似之处:样式感觉像CSS,很好。 后面的XAML代码就像ASP.NET一样。 3D感觉像DX或OpenGL,很好。 路由事件感觉像.NET事件,很好。 依赖属性感觉像属性,很好。 这份名单可以继续使用。 但是,在这些熟悉的比喻中,有太多的外部概念必须被掌握:控制模板,故事板,数据绑定立刻就浮出水面。 这不是一个微不足道的曲线,不要期望在第1天,甚至第1周甚至第1个月都有生产力。

尽pipe这是值得的! ;)

学习WPF的难度不在于模型的API。 这是一个非常不同的心理模型,比你使用Windows窗体的东西。

通常情况下,数据绑定到对象上的属性,而不是编写必须填充UI元素的方法。 为了获得复杂的行为,你通常使用一定程度的构图。

作为一个例子,如果你有一系列你想要在列表中的项目,一个文本后面跟着一个图像。 在Windows窗体中,你会得到列表并迭代它。 对于列表中的每个项目,您将创build项目的控件和文本,并添加图片,然后将新的子控件添加到列表中。 (确切的程序可能会根据控件的types而有所不同,您可以添加SubItems而不是仅仅创build一个控件等)。

WPF会处理这个非常不同。 在WPF中,在顶层,您将声明一个容器对象并将其绑定到列表。

然后,您将为该容器提供一个用于显示其项目的模板。 该模板基本上是另一个控件,它定义了子元素的位置,这些子元素被绑定到列表所填充的类的实例。

它的结尾感很强,而且很荒谬。 这也是一个非常不同于大多数开发人员习惯的模型,除非你能够内化模型,否则遇到的问题很常见,试图按照你在Windows Forms /

一旦你习惯了模型,但回到其他API是痛苦的。 不是因为他们突然很难,而是因为你知道事情是多么容易。

正如你从我的问题历史中可以推断出的,我肯定已经发现它是一个陡峭的学习曲线。 你几乎完全描述我的经验。 作为一个全职的学生(在math和物理学,而不是软件工程)谁只做WPF编程爱好者的应用程序,这是相当令人沮丧的。 我已经尝试在WPF中创build新的应用程序,或者将一些旧的应用程序移植到WPF中,并且总是卡在一些似乎非常困难的小东西上。 有一件事我没有做过—基本上是因为时间的关注—就是坐下来,例如一本书或一系列教程,一步一步地通过它们。 如果你是一个专业的开发人员,那可能会更加可行,而且可能会让WPF更容易。

我认为,最大的麻烦就是让我头脑发热,模型 – 视图 – 视图模型(参见我的这个问题 )。 而在WinForms中,我可以将一些东西拖放到表单上,混淆其属性,并在代码隐藏中挂接一些事件,现在我必须考虑将事物划分为视图,模型和视图模型。 许多这些隐藏事件成为validation规则或数据绑定的东西。 这可能不会帮助我的应用程序都不是真正的“数据处理”应用程序; 也就是说,他们不会操纵客户信息或任何其他信息的数据库,这些信息很有意义。 相反,它更像是“我想要一个用户inputURI的文本框,并且我希望只有当该文本框包含有效的URI时,才能启用”下载“button。 像这样的小事情开始变得非常复杂。 我必须考虑这个URI适合我的模型的地方,它适合我的视图模型,钩住一个validation框架,以及将button和文本框的属性绑定到所有这些元素。

另一个烦人的问题是框架中有多less东西是简单的丢失。 例如, sorting列表视图 。

但最终,WPF有很多优点。 布局框架似乎比主要基于像素的WinForms模型好很多。 它使用了像Segoe UI这样的现代字体,heh:P。 它的合成function也非常棒,例如把图像放在一个button上是多么的自然(只需要在XAML标签中放置一个图像XAML标签)。 我怀疑它可以解决我的问题,关于控件里面的checkbox ,虽然我还没有尝试过。

我一直玩.NET超过4年,主要是Windows窗体应用程序。 绑定不是未知的,我尝试在我的所有C#应用程序中使用良好的实践。 在过去的一个月中,我一直在学习WPF的工作,我不得不承认,这是非常强大的,但要实现的东西很难。 你可以做更多的事情,用更less的努力实现一些很酷的devise,但是只有当你知道它是如何工作的时候,这很难,因为它是巨大的。

更多的是,debugging更难 – 这也使得学习更慢。 我认为这个问题是Visual Studio的IDE,在XAML中帮不了多less忙,而且在绑定或其他XML标记中的东西时,您会很快错过C# 智能感知的某些function。 我喜欢它,但是,学习曲线并不平坦。

它可以非常陡峭。

我花了一个月的时间用WPF做实验,写了一个我们当前产品的模型,而没有为数据绑定模型开发一个直觉,甚至弄清楚微软如何使用它。 我花了很less的时间去掌握ASP.NET MVC的基础知识。

[我们的应用程序显示/取决于很多实时数据,我使用了由Nathan提供的Windows Presentation Foundation书籍。 也许另一本书会更合适。]

一旦你了解了它的工作原理,WPF很容易 – 试试“ WPF – 如何和为什么 ”。 最大的问题是,如果它是值得的,仍然有很多应用程序可以很好地实现为Windows窗体和一些graphics。

我也同意前面关于进入XAML的评论 – 这就像一个稍微复杂一点的HTML,唯一真正的困难是找出什么是什么。 至于在一个项目中被卡住了 – 你不是总是被困在一个项目中吗? 当你开始尝试做1%这很难。

是的,这不是一个容易的步行 – 但不要害怕。 关于WPF的东西,它是精美的devise,所以你得到一个持续的积极的情绪反馈(至less我做了)。 你喜欢坐着玩,每隔几分钟就喊一声“哇”;)

这将是其中的一个“取决于”的答案,但是真正取决于的是如果你是那种试图不断提高你的技能的开发者。 如果是这样的话,最终归结为几件事情。

购买WPF Unleashed (其他书籍可用,但我完全热情地推荐这个),通过例子工作,大约2个月左右,你会想知道如何在没有它的情况下完成任务。

这不是火箭科学,没有范式转换的概念来处理。 事实上,如果你习惯于保持你的逻辑和expression之间的良好分离,它应该适合于。

为了达到一定程度的掌握,你可能会在6到12个月的时间里玩。

祝你好运。

从我与之共事的less数人那里学习,他们真的推荐从Expression Blend中浏览所有的教程。 这给了他们一个很好的背景WPF和更好的工具使用时使用它。

如果您有使用HTML或XML或类似语言的经验,这并不是特别困难,特别是如果您有网页devise经验。 如果你严格来自WinForms背景,学习曲线会更陡。 我目前正在学习WPF,因为我来自广泛的Web开发背景,所以我没有find所有难以掌握的概念。 我发现WindowsClient.net上的在线教程video也是非常有用的,如果组织有点差。