开始一个WPF项目时的记忆重载入

news2024/12/27 13:34:42

目前在工业软件的UI开发方案选择中,WPF仍然是一个重要的选项。

但是其固有的复杂性,对于像我这样,并不是一直在从事界面开发的人来说,每次重启,都需要一两天的适应的时间。所以这里稍微写一个笔记。

还是老办法,学好一门技术的要点虽然很多,但大致可以简化为两步:一是基础的知识要扎实,这里的基础知识,不是说你要背熟这个相关的,而是对UI的理解,对软件开发的分工的理解。

1。 基础的UI设计哲学

(1)分工。WPF的初衷最大的来源是分工。界面的设计与 Control或序列化分离。即UI设计与程序员分离。理解这一点,是最最重要的,占75%的占比。也就是当你困惑,或都不清楚该如何选择时,都要重新到这个第一性原理这里重新思考。

(2)数据驱动。虽然我们日常的软件,往往是人为驱动。但工业软件往往相反,是数据驱动的,Monitor的时间,多于控制的时间。可以说,WPF是第一个专门在这个方向,做为设计初始目标的框架。

记住这两点,就基本上不会忘记WPF的选型要件。

2。 MVVM+datacontext

这二者其实是独立的,所以,原本应该写为三条。但也可以放在一起。data就是土壤,MV相关于土壤之下的部分,VM相当于上面的。Model-View-ViewModel 。

这里也有两点,一个是MVVM为什么要这样设计;另一个是datacontext.

这部分,每次大脑重载入时,是需要消耗一些时间的。

很重要的一个原因是,目前世界上,概念提出的多,工具开发得好的,几乎没有。微软的blend并没有实现哪怕1/10的设计目标。所以,是需要做类似本文的笔记,或者死记硬背。

(1)WPF与MVVM。要记住一点是,WPF,这三个字母的含义与MVVM没有半点关系。但是,客观来说,只要是稍微复杂一点的WPF程序,你必须用MVVM模式。

这是每次重新开始时,要重新理解的。

以往我们在MFC或者QT开发时,我们会人为加入一个MDP(这是我从华为开发L2 VPN时学到的),即消息分派中心,也就是发送方,不需要关注接收的窗口是否已被用户开启;MDP是一个大的多维矩阵(或者红黑树,B树)路由器,如果target并不存在(或者说没有到它这里注册:register),收到的消息,被吞掉,而不会调用接收方的trigger agent.

所以,如果仅仅用最基本的WPF的窗体,窗体之间的消息转发,很快你就会发现非常困难。这种困难,WPF并没有提供官方的解决方案,所以,一定要从最开始就选择MVVM模式。

或者说,WPF的Window模式,其实并不适用于工程。

它们的关系如下:

要注间我绘制的是示意图。主要是用于我自己的记忆。

我里我想强调的只有两点:一个数据的上行过程,即Model的改变,不需要通知VM,VM从INotifyPropertyChanged感知到哪些自己已注册的变量发生了变化。当然,实际上是Model触发的,但如果VM没有注册,那么就不会接收到。

第二点是DataContext的唯一性。虽然工程中,它是可以有许多个的,但我认为不需要。这是因为界面中的WPF  元素层层嵌套,一个Usercontrol嵌入另一个,即VIEW中的层次结构并不是model的hierarchy。Model侧,可以有许种类的对象,以及它们的hierarchy,但对应的上下文只需要一个。这是本文中最最重要的点。

3。 至于反方向,即从UI到model的方向的command或属性的绑定,这里不作描述了。因为我也不是很了解。

不这,这里有一个非常好的简单例程:

相关的代码:

https://download.csdn.net/download/haoyujie/89729611uicon-default.png?t=O83Ahttps://download.csdn.net/download/haoyujie/89729611

总结:如果只留一点要记下来的,就是DataContext是从属于主Window的,与MVVM无关。有且只有一个。是超然的存在。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2120823.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

分享一款520表白节JS代码

源码介绍 今天给大家分享一款JS表白源码 js会随 随机颜色心形跟随鼠标互动520表白节女神表白利器! 修改的话就搜索:LOVEh 就能找到这个英文了。 效果预览 源码获取 分享一款520表白节JS代码 百度网盘提取码:2yar:https://pan.…

JavaScript高级——回调函数

1、回调函数的含义 ① 你定义的 ② 你没有调 ③ 但最终他执行了(某个时刻或者某个条件下) 2、常见的回调函数 ① dom事件回调函数 —— 发生事件的dom元素 ② 定时器回调函数 —— window ③ ajax请求回调函数 ④ 生命周期回调函数 本文分享…

【Adaptive AutoSAR 源码解析01】通信中间件技术总览

https://www.autosar.org/fileadmin/standards/R21-11/AP/AUTOSAR_EXP_ARAComAPI.pdf#page=8&zoom=100,94,473

pip install “git+https://xxx“报错error: subprocess-exited-with-error

有时候即使使用科学上网,可以正常访问github也会发生pip install “githttps://xxx“报错 如 解决方法: 我们可以将pip install “githttps://xxx“分为两步: 第一步: pip install "githttps://xxx" 第二步&#…

计算机技术专硕,三维数字地球的学习路径?

三维数字地球是一个跨学科领域,涉及地理信息系统(GIS)、计算机图形学、遥感技术、大数据处理等多个方面。作为计算机技术专硕的学生,可以按照以下学习路径来逐步深入: 1、基础理论学习: 地理信息系统&…

基于IP子网的VLAN典型配置举例(H3C,其他厂商同理)

基于IP子网的VLAN典型配置举例 1. 组网需求 如下图所示,办公区的主机属于不同的网段192.168.5.0/24和192.168.50.0/24,Device C在收到来自办公区主机的报文时,根据报文的源IP地址,使来自不同网段主机的报文分别在指定的VLAN中传…

仙人掌:花语与传说交织的独特魅力

仙人掌,花语丰富多样,有坚强勇敢,也有温柔孤独。其传说精彩纷呈,蕴含着爱与勇气。了解仙人掌的花语与传说,感受它独特的魅力与坚韧精神。 一、仙人掌的花语内涵 仙人掌,一种生长在恶劣环境中的独特植物&am…

机器视觉硬件知识点整理(一):光源类型以及选型

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一,光源1.1 环形光源1.2 背光源1.3 条形光源1.4 同轴光源:1.5 点光源1.6 碗状光源(球积分光源) 前言 在探索机器视觉的奥秘之旅中&…

20240910软考架构-------软考141-145答案解析

每日打卡题141-145答案 141、【2015年真题】 难度:简单 在分布式数据库中包括分片透明、复制透明、位置透明和逻辑透明等基本概念,其中:( )是指局部数据模型透明,即用户或应用程序无须知道局部场地使用的是哪种数据模型。 A&…

【快速解决】搭建VUE+VScode+elementUI开发环境,Vue环境配置

目录 1、通过这个之间下载node.js(全选next即可) 2、winr检验是否安装成功(运行下面两个命令即可) 3、将下面我给你的这个压缩包解压,然后放到空间足够的磁盘里面 4、【重点】设置环境变量 第一个变量路径里面长这…

安装OpenResty(Linux-Docker)

文章目录 创建挂载目录的配置文件和日志通过lua脚本实现通过请求头动态路由 直接在linux中安装请参考博客 https://blog.csdn.net/shall_zhao/article/details/142070389 这篇博客讲解如何在docker中安装 创建挂载目录的配置文件和日志 这个主要是为了我们后面对配置文件进行…

VS中SVN的简介、安装和使用(安装+汉化+使用)

一.安装SVN 1.下载:Downloads TortoiseSVN 安装包: 汉化包(就在安装包下面): 2.安装:无脑下一步 SVN客户端不是指一个桌面应用程序,而是集成到系统的右键菜单中的插件 二.安装vs插件&#x…

基于SpringBoot的在线购物平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于JavaSpringBootVueMySQL的在线购物平台&am…

亚信安慧AntDB数据库与华为DPA数据保护一体机完成兼容性互认证,共筑数据安全与效率新高地

近日,湖南亚信安慧科技有限公司(简称“亚信安慧”)与华为技术有限公司(简称“华为”)完成了亚信安慧AntDB数据库与华为DPA数据保护一体机兼容性互认证。 图1:华为DPA数据保护一体机兼容性互认证 亚信安慧A…

专业通风天窗厂家能提供哪些服务

专业通风天窗厂家提供的服务通常涵盖了从设计、生产、销售到安装、售后等多个环节,具体服务内容可能因厂家而异,但一般包括以下方面。1、设计服务个性化设计:根据客户的需求和建筑物的特点,提供科学合理的设计方案。包括天窗的尺寸…

RTX3060 FP64测试与猜想

RTX3060 FP64测试与猜想 一.小结二.查看FP64的峰值性能三.打满FP64、FP32的利用率,对比差异四.进一步证明pipe_fp64_cycles_active并不是2个fp64 core的metrics RTX3060 FP64测试与猜想 一.小结 RTX3060 compute capability为8.6,每个SM有2个FP64 core。每个cycle可输出2个fp6…

在Linux中从视频流截取图片帧(ffmpeg )

Linux依赖说明: 说明: 使用到的 依赖包 1. ffmpegsudo apt update sudo apt-get install ffmpeg2. imagemagick (选装) (检测图像边缘信息推断清晰度,如果是简单截取但个图像帧>用不到<)sudo apt-get install imagemagick备注: 指令及相关参数说明核心指令: (作用: 执…

docker部署rabbitMQ 单机版

获取rabbit镜像&#xff1a;我们选择带有“mangement”的版本&#xff08;包含web管理页面&#xff09;&#xff1b; docker pull rabbitmq:management 创建并运行容器&#xff1a; docker run -d --name rabbitmq -p 5677:5672 -p 15677:15672 rabbitmq:management --name:…

InVEST实践及在生态系统服务供需、固碳、城市热岛、论文写作等实际项目中的具体应用

不论您是小白亦或是已经能够成功运行InVEST模型生成结果&#xff0c;您可以自由选择课程内容&#xff0c;如果您是小白老师手把手教您&#xff0c;如果您已经是InVEST模型熟悉者&#xff0c;已经为您准备了结合实际项目内容以及通过模型进行高质量的论文重现&#xff0c;还有很…

Java面试题-基础和框架-Java面试题二

1、什么是抽象类&#xff1f; 在 Java 中&#xff0c;抽象类用于创建具有某些被子类实现的默认方法的类&#xff0c;一个抽象类可以有没有方法体的抽象方法&#xff0c;也可以有和普通类一样有方法体的方法。 abstract 关键字用于声明一个抽象类&#xff0c;抽象类无法实例化…