WinFMS程序员的WPF是什么?
WinForms提取的是为表单添加控件,以及添加事件处理程序。这简单易行,可以快速创建功能GUI。
另一方面,WPF是XAML(?)+ Code(?),这似乎是一种更复杂的方式来制作更漂亮的UI。关于WPF的各个方面存在大量现有的SO问题,但我正在寻找一个关于如何获取它的两句话。我应该专注于学习XAML吗?或者是通过直接访问类和编写代码(如Winforms)来编写真正的WPF?
另外,像我这样的WinForms程序员在使用WPF时会看到什么实际好处? 3D图形,文本的任意缩放以及应用程序的自定义“皮肤”都不是有效的答案。 WPF提供了一个用于跟踪装运订单的应用程序。
答案 0 :(得分:11)
WPF带来
答案 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中,但更简洁的方法是使用模型类。