什么是WinForms程序员的WPF?

什么是WPF到WinForms程序员?

WinForms蒸馏是为表单添加控件,并添加事件处理程序。 这很简单,您可以快速创建functionGUI。

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

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

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

WPF带来了

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

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

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

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

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

Visual Studio 2008包含一个WPF设计器。

该video可能很有用: 在Visual Studio 2008中创建C#WPF应用程序

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

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

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

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

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

在这里,我试图用一个非常简单的天真的术语回答一些初学者/ 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的unit testing,因为在unit testing期间不需要代码,因此不需要UI相关对象,因此可以实现100%的代码覆盖。 在unit testing中,用户可以传递’命令’(在wpf中查找命令)来测试特定的用例。

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

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

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

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

viewmodel和model之间有什么区别?

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

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

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