诚信网站建设的意义,wordpress说说加分类,济南做网站设计,手机网站的制作目前在工业软件的UI开发方案选择中#xff0c;WPF仍然是一个重要的选项。
但是其固有的复杂性#xff0c;对于像我这样#xff0c;并不是一直在从事界面开发的人来说#xff0c;每次重启#xff0c;都需要一两天的适应的时间。所以这里稍微写一个笔记。
还是老办法…目前在工业软件的UI开发方案选择中WPF仍然是一个重要的选项。
但是其固有的复杂性对于像我这样并不是一直在从事界面开发的人来说每次重启都需要一两天的适应的时间。所以这里稍微写一个笔记。
还是老办法学好一门技术的要点虽然很多但大致可以简化为两步一是基础的知识要扎实这里的基础知识不是说你要背熟这个相关的而是对UI的理解对软件开发的分工的理解。
1。 基础的UI设计哲学
1分工。WPF的初衷最大的来源是分工。界面的设计与 Control或序列化分离。即UI设计与程序员分离。理解这一点是最最重要的占75%的占比。也就是当你困惑或都不清楚该如何选择时都要重新到这个第一性原理这里重新思考。
2数据驱动。虽然我们日常的软件往往是人为驱动。但工业软件往往相反是数据驱动的Monitor的时间多于控制的时间。可以说WPF是第一个专门在这个方向做为设计初始目标的框架。
记住这两点就基本上不会忘记WPF的选型要件。
2。 MVVMdatacontext
这二者其实是独立的所以原本应该写为三条。但也可以放在一起。data就是土壤MV相关于土壤之下的部分VM相当于上面的。Model-View-ViewModel 。
这里也有两点一个是MVVM为什么要这样设计另一个是datacontext.
这部分每次大脑重载入时是需要消耗一些时间的。
很重要的一个原因是目前世界上概念提出的多工具开发得好的几乎没有。微软的blend并没有实现哪怕1/10的设计目标。所以是需要做类似本文的笔记或者死记硬背。
1WPF与MVVM。要记住一点是WPF这三个字母的含义与MVVM没有半点关系。但是客观来说只要是稍微复杂一点的WPF程序你必须用MVVM模式。
这是每次重新开始时要重新理解的。
以往我们在MFC或者QT开发时我们会人为加入一个MDP这是我从华为开发L2 VPN时学到的即消息分派中心也就是发送方不需要关注接收的窗口是否已被用户开启MDP是一个大的多维矩阵或者红黑树B树路由器如果target并不存在或者说没有到它这里注册:register收到的消息被吞掉而不会调用接收方的trigger agent.
所以如果仅仅用最基本的WPF的窗体窗体之间的消息转发很快你就会发现非常困难。这种困难WPF并没有提供官方的解决方案所以一定要从最开始就选择MVVM模式。
或者说WPF的Window模式其实并不适用于工程。
它们的关系如下 要注间我绘制的是示意图。主要是用于我自己的记忆。
我里我想强调的只有两点一个数据的上行过程即Model的改变不需要通知VMVM从INotifyPropertyChanged感知到哪些自己已注册的变量发生了变化。当然实际上是Model触发的但如果VM没有注册那么就不会接收到。
第二点是DataContext的唯一性。虽然工程中它是可以有许多个的但我认为不需要。这是因为界面中的WPF 元素层层嵌套一个Usercontrol嵌入另一个即VIEW中的层次结构并不是model的hierarchy。Model侧可以有许种类的对象以及它们的hierarchy但对应的上下文只需要一个。这是本文中最最重要的点。
3。 至于反方向即从UI到model的方向的command或属性的绑定这里不作描述了。因为我也不是很了解。
不这这里有一个非常好的简单例程
相关的代码
https://download.csdn.net/download/haoyujie/89729611uhttps://download.csdn.net/download/haoyujie/89729611
总结如果只留一点要记下来的就是DataContext是从属于主Window的与MVVM无关。有且只有一个。是超然的存在。