WPF学习曲线有多糟糕?

时间:2009-07-31 12:21:23

标签: c# wpf

我从几个人那里读到并听到WPF学习曲线相当陡峭(取决于你的知识或经验)。似乎大多数人都可以让演示或入门项目工作,然后发现自己在杂项问题上遇到了很长时间。我很好奇特别难以学习或理解的内容(图层,SDK,XAML,数据绑定等),如果您对如何避免/减轻某些困难主题有任何建议?

11 个答案:

答案 0 :(得分:35)

WPF与众不同;没有远离那个。

我的主要建议是不要害怕XAML;拥抱它,这就是权力所在!

让我解释一下: -

为了提高工作效率,我更喜欢在文本视图中编写XAML,因为我可以通过几次击键创建窗口的裸布局。如果您经常键入代码,那么这是一种非常快速的开发窗口的方法。然后,您可以使用Visual编辑器使其看起来很漂亮。

如果您记住XAML的每个元素都将“new”该对象以及该XAML元素的每个属性都是该对象的属性,您可以将XAML视为对象创建和赋值属性。与编写代码非常相似。

如果你在视觉设计师身上花费太多时间,那么你就不会理解这一点,对于一些人来说,这会减慢学习曲线。

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

我还强烈建议尽早学习视图和视图模型的概念,即使您没有订阅CompositeWPF中的所有内容,因为这确实有帮助。

答案 1 :(得分:17)

来自Karsten Januszewski的一篇很好的文章称Hitting the Curve: On WPF and Productivity你可能会觉得有趣:

  

让我们明确一点:WPF带有一个   曲线。我现在看了一堆   开发人员打破了这条曲而且   曲线很陡。我们正在谈论   两周到两个月的曲线   取决于开发人员和   经验水平/直觉   开发者有。会有片刻   完全神秘化和充足的   照明时刻。它立刻就是   痛苦和愉快,如果   开发人员喜欢发现   一个深思熟虑的UI   平台。它既熟悉又   外星人。有许多相似之处   其他UI开发范例:样式   感觉像CSS,好吧。 XAML   代码背后感觉就像ASP.NET一样   有点。 3D感觉像DX或OpenGL,   好吧。路线事件感觉像   .NET事件,很好。依赖的   属性感觉就像属性一样   有点。这份名单可以继续使用。但   admidst这些(有点)熟悉   隐喻有那么多外星人   必须掌握的概念:   控制模板,故事板,   数据绑定立即浮现在脑海中。   这不是一个微不足道的曲线,也不是   期望在第1天或   甚至第1周甚至第1个月。

尽管这一切都值得! ;)

答案 2 :(得分:11)

学习WPF的难点不在于API和模型。这是一个非常不同的心理模型,而不是像Windows Forms那样使用。

您通常将数据绑定到对象上的属性,而不是编写强制填充UI元素的方法。要获得复杂的行为,通常会使用某种程度的构图。

例如,如果您在列表中有一系列项目,则需要一段文字,然后是图像。在Windows窗体中,您将获得列表并对其进行迭代。对于列表中的每个项目,您将为项目和文本创建控件,然后添加图片,然后将新的子控件添加到列表中。 (确切的过程可能会因控件的类型而异。您可以添加SubItems而不只是制作一个控件等。)

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

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

最终会产生一种非常有感觉的,并且非常强大。它也是一个与大多数开发人员习惯的模型非常不同的模型,并且在您可以内化模型之前,尝试按照Windows Forms /等方式执行操作会遇到问题。

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

答案 3 :(得分:9)

我已经使用.NET超过4年了,主要是Windows Forms个应用程序。绑定不是未知的东西,我尝试在所有C#应用程序中使用良好的实践。在过去的一个月里,我一直在学习WPF,我不得不承认它非常强大,但实现起来要困难得多。你可以做更多的事情,用更少的努力实现一些很酷的设计,但只有一旦你知道它是如何工作的,它很难,因为它是巨大的。

更多,调试更难 - 这也使得学习更加缓慢。我认为问题是Visual Studio的IDE在XAML中没有多大帮助,当你做绑定或其他现在在XML标签中的东西时,你很快就会错过C#的IntelliSense的一些功能。我喜欢它,但是,学习曲线并不顺畅。

答案 4 :(得分:9)

正如你可能从我的问题历史中推断出来的那样,我肯定发现它是一个陡峭的学习曲线。你几乎完全描述我的经历。作为一名全职学生(数学和物理,而不是软件工程),他只为业余爱好者应用程序进行WPF编程,但却相当令人沮丧。我已经尝试在WPF中创建新的应用程序,或者将我的一些旧应用程序移植到WPF上,并且总是陷入一些似乎非常困难的小事。我没有做过的一件事 - 主要是因为时间的关注 - 与一本书或一系列教程,一步一步地完成它们。如果您是一名专业开发人员,那可能会更加可行,并且可能会让您更轻松地使用WPF。

我认为,让我遇到麻烦的最重要的事情就是围绕Model-View-ViewModel范例(参见例如this question of mine)。在WinForms中,我可以将一些东西拖放到一个表单上,弄乱它的属性,并在代码隐藏中连接一些事件,现在我必须考虑将事物分区为视图,模型和视图模型。很多这些代码隐藏事件都成为验证规则或数据绑定的东西。我的应用程序都不是真正的“数据操作”应用程序,这可能无济于事;也就是说,他们不会操纵客户信息或任何东西的数据库,其中很多都是有意义的。相反,它更像是“我想要一个用户输入URI的文本框,我希望只有在该文本框包含有效URI时才能启用”下载“按钮。这样的小事开始变得非常复杂;我必须考虑URI在我的模型中的位置,它适合我的viewmodel,连接验证框架,以及按钮和文本框的数据绑定属性到所有这些元素。

另一个恼人的问题是框架中缺少多少东西。例如,sorting listviews

最后,WPF有很多优点。 The layout framework seems a lot nicer than the primarily pixel-based WinForms model.它使用像Segoe UI这样的现代字体,呵呵:P。它的合成功能也非常棒,例如将图像放在按钮上是多么自然(只是将图像XAML标记放在按钮XAML标记内,基本上);我怀疑它也可以解决my problem regarding checkboxes with controls inside of them,虽然我还没有尝试过这样做。

答案 5 :(得分:6)

它可能非常陡峭。

我花了一个月的时间来试验WPF并在其中编写我们当前产品的模型,而没有对其数据绑定模型产生直觉,甚至没有弄清楚微软如何使用它。掌握ASP.NET MVC的基础知识花了我很少的时间。

[我们的应用程序显示/依赖于大量实时数据,我使用了Nathan的Windows Presentation Foundation一书。或许另一本书更合适。]

答案 6 :(得分:5)

一旦你对它的工作原理有了一般了解,WPF就很容易了 - 试试“WPF - how and why”。 最大的问题是如果它值得一试,那么仍有很多应用程序可以很好地实现为Windows Forms和一些图形。

我也同意之前关于进入XAML的评论 - 它就像一个稍微复杂的HTML,唯一真正的难点是找出什么做了什么。至于以后在项目中遇到困难 - 你是否总是在以后的项目中遇到困难?当你开始尝试做1%的艰难时。

答案 7 :(得分:3)

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

购买WPF Unleashed(其他书籍可用,但我全力推荐这本书),通过这些例子,在大约2个月左右的时间内你会想知道如果没有它就会完成任务。

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

为了达到掌握程度,你可能需要在6到12个月的时间里玩它。

祝你好运。

答案 8 :(得分:3)

是的,走路并不容易 - 但不要害怕。关于WPF的事情,它设计精美,因此你在学习它时会得到持续的积极情绪反馈(至少我做过;)。你喜欢坐着玩,并且每隔几分钟惊呼“WOW”;)

答案 9 :(得分:2)

从我工作过的少数人那里学习它,他们真的建议您阅读Expression Blend的所有教程。这为他们提供了WPF的良好背景,以及使用它时更好的工具。

答案 10 :(得分:2)

如果您有使用HTML或XML或类似语言的经验,那么这并不是特别困难,特别是如果您有网页设计经验。如果您严格来自WinForms背景,那么学习曲线会更加陡峭。我目前正在学习WPF,因为我来自广泛的Web开发背景,我找不到大多数难以掌握的概念。我发现WindowsClient.net上的在线教程视频也非常有用,如果组织有点糟糕的话。

相关问题