什么是WinForms程序员的WPF?

时间:2009-04-27 04:54:22

标签: c# .net wpf winforms

WinFMS程序员的WPF是什么?

WinForms提取的是为表单添加控件,以及添加事件处理程序。这简单易行,可以快速创建功能GUI。

另一方面,WPF是XAML(?)+ Code(?),这似乎是一种更复杂的方式来制作更漂亮的UI。

关于WPF的各个方面存在大量现有的SO问题,但我正在寻找一个关于如何获取它的两句话。我应该专注于学习XAML吗?或者是通过直接访问类和编写代码(如Winforms)来编写真正的WPF?

另外,像我这样的WinForms程序员在使用WPF时会看到什么实际好处? 3D图形,文本的任意缩放以及应用程序的自定义“皮肤”都不是有效的答案。 WPF提供了一个用于跟踪装运订单的应用程序。

8 个答案:

答案 0 :(得分:11)

WPF带来

  • 声明性UI编程:UI(XAML)的表示或外观已经与代码(.cs等所有)分开,因此XAML可以由好的人独立创建在那种事情 - 平面设计师。然后,他们将完成的外观提交给只编写代码以使其工作的开发人员。 (更简单的东西可以直接在XAML中处理)假设为您提供更好的并行性和良好的用户体验(而不是开发人员批准的用户界面)
  • 数据绑定:再次声明性弯曲..您声明性地指定此UI控件呈现的模型属性,WPF负责将数据拉入控件&更新修改后的内容以及更改通知。
  • 改进的复合控制模型 - 你现在几乎可以将任何东西嵌入到任何东西中,所以现在想象力没有界限。
  • 数据模板,控制模板等.. - 再次将UI与代码分离。这些XAML模板指定(一次)数据结构或UI控件对用户的外观。
  • 更好的X :当然MS在一系列其他方面得到改善,例如渲染(更少的GDI更新),缩放(分辨率独立性),透明度,布局(非绝对),文本渲染,动画&视频支持,改进事件模型等。所有
  • 样式,触发器:使用一个位置的样式(再次使用XAML)可以更轻松地全局应用统一的外观。触发器是在某些事件发生时执行的代码块,例如'此控件的文本已更改..所以现在将其前景属性更新为蓝色以指示“已修改”。简单的东西可以直接在XAML中完成。

答案 1 :(得分:1)

我认为一种看待它的方法是考虑HTML + CSS网页。我们有HTML,这很棒,除了事情都乱七八糟。人们意识到,使用CSS,您可以将文档的结构与其表示分开。 XAML做同样的事情,或者至少允许并鼓励它。

至于实际的好处,请浏览MSDN示例。我倾向于认为WPF更倾向于所谓的“富媒体”,其中包含更复杂的元素。您跟踪装运订单的应用程序示例不是很好,特别是因为其中一些系统仍在基于DOS的界面中运行。

答案 2 :(得分:1)

过去4年我几乎一直在WinForms工作,并开始在工作中使用WPF进行几个小项目。学习曲线陡峭。但是一旦你习惯它,它是值得的。

WPF不仅仅是视觉上的糖果,如皮肤或动画。即使是跟踪装运订单的基本应用程序,您也可以利用WPF。 WinForms只带你到目前为止的控件。如果您想要显示略微自定义的UI,您通常需要使用GDI在控件中进行自定义绘制,这很快就会变成一场噩梦。在WPF中,通过数据模板自定义任何内容都是微不足道的。您可以轻松自定义列表框元素,添加控件以列出视图列或标题等.WPF允许您通过其强大的布局系统控制复杂的UI布局。我也很惊讶WPF中需要的代码很少,以完成我以前在WinForms中所做的相同的事情,因此这意味着更少的错误并且更容易维护应用程序。

答案 3 :(得分:0)

Visual Studio 2008包含WPF设计器。

此视频可能会引起您的兴趣:Create a C# WPF Application in Visual Studio 2008

答案 4 :(得分:0)

WPF应用程序的XAML部分模糊地取代了WinForms中的WinForm.Designer.cs文件。

WPF模型为UI和各个控件设计了更好的设计,修复了WinForms的许多缺点,并指导您(希望)更好的Seapration of Concern设计。

答案 5 :(得分:0)

WPF应该是每个WinForms程序员的梦想:它不是在程序上做每件小事,而是让你说出控件是什么,把它们放在哪里,它们看起来是什么样的,在某种程度上甚至可以说它们在XAML中的表现如何,让你自定义“代码隐藏”中的行为。哦,由于XAML的声明性,设计师现在可以为你做更多的事情。

答案 6 :(得分:0)

我发现XAML在开始时也有点复杂,但是一旦我习惯了它,我发现它非常简单(一旦你知道基本控件)。关于它的最好的事情之一是数据绑定。

通常当我编写WPF应用程序时,我会将它用于我的UI上的所有内容。将控件绑定到viewmodel的命令和属性可以完全将表示与设计分开,我的代码隐藏中通常没有一行代码。这使我的ViewModel /业务逻辑对象易于测试,并且完全独立于任何可视化表示,而这些表示又可以轻松替换。

答案 7 :(得分:0)

在这里,我试图用一个非常简单的天真的术语来回答一些初学者/ winforms开发人员面临的WPF问题,以及我在开始使用WPF时遇到的问题。互联网上有很多文章和教程提供了足够的知识,但很难找到非常简单的问题的答案。我想在这里解决它。

什么是WPF?

Windows Presentation Foundation随着扩展而发展;它是一个用于构建Windows应用程序的“Presentation”系统。如果您是一名winforms开发人员,那么您在WPF中可以找到的主要区别在于设计师的外观。与winforms不同,设计器代码不是C#代码,而是XAML代码。

为何选择WPF?

嗯,WPF比winforms更受欢迎的主要原因是WPF提供了丰富的UI。 除此之外,WPF还提供了许多其他好处,在互联网的许多教程中都可以更清楚地获得它。 它是一个基于矢量的渲染引擎。如果只是比较winform应用程序的UI和WPF应用程序,那么外观和感觉方面的差异就会很明显。

什么是MVVM?

MVVM是一种模式,在开发应用程序时进行了调整。它被扩展为“模型视图视图模型”,基本上在构建项目时我们有一个模型文件夹,在该文件夹下将放置所有模型文件(.cs),在视图模型文件夹下所有视图模型文件(.cs)将是放置在视图文件夹下并放置所有视图文件(.xaml)。 如果使用MVVM,则不会有任何代码,这意味着.xaml.cs文件除了自动创建的方法之外不会有任何代码。

模型:模型具有业务逻辑部分,该部分支持视图模型以及最终将在视图中显示的数据。

ViewModel :每个视图都有一个视图模型。 Viewmodel将实现INotifyPropertyChanged接口,并且具有绑定到相应视图的所有属性。视图模型未加载任何业务逻辑,责任在于模型。

查看:视图只是设计窗口的xaml文件。 XAML是一种标记语言。在WPF中,与winforms不同,每个控件都将使用预定义或用户定义的依赖属性绑定。

为何选择MVVM?

每当在WPF中开发应用程序时,MVVM都可以使用它。使用MVVM的最大优势之一是它可以进行独立于UI的单元测试,因为在单元测试期间不需要代码,因此不需要UI相关对象,因此可以实现100%的代码覆盖。 在单元测试中,用户可以传递'命令'(在wpf中查找命令)来测试特定的用例。

使用WPF时使用MVVM是一项授权还是绝对必要?

我会说不,在使用WPF时不一定要使用MVVM,但这取决于要求。人们必须研究MVVM提供的优势,然后决定是否使用它。 MVVM在开发的最初几天增加了复杂性,但最终它带来了它的好处。 如果完整的应用程序是winforms并且只在WPF中开发了一个小模块而不是一个小功能,那么就没有必要遵循MVVM,人们可以愉快地拥有代码并获得丰富的UI体验。我再次完全重复它取决于要求的类型。

我可以将多个视图模型用于单个视图/多个视图到单个视图模型吗?

这是一个我在任何.net社区都没有得到明确清晰回答的问题。首先,当我们看到使用MVVM的主要目的是实现100%的代码覆盖率时,这很明显我们将独立测试每个视图模型,因此测试完整的表单。考虑到这一点,最好选择一种视图模型方法。 如果有必要使用MVVM Light messenger或任何其他便于它的方法,我们总是可以在视图模型之间进行通信。

viewmodel和model之间有什么区别?

这是初学者总是会遇到的一个问题,因为他们两者之间没有太大差异。区别在于: - 模型只不过是一个具有修改数据的数据方法的类,它将在视图模型中使用并最终绑定到视图。 ViewModel只具有绑定到视图的属性。在get或set方法中,可以在模型中调用方法来获取数据。同样,此模型适用于此特定视图模型。 现在您可以决定是否真的需要一个模型类,如果没有繁重的业务逻辑,那么您可以避免使用模型类并将其放在viewmodel中,但更清洁的是使用模型类。

在MVVM中,我可以跳过视图的视图模型或模型类吗?

同样,它取决于前面提到的要求,如果没有繁重的业务逻辑,那么你可以避免使用模型类并将其放在viewmodel中,但更简洁的方法是使用模型类。