c#MVVM中的消息通知机制

lblTemp.DataBindings.Add("Text", _vm, nameof(_vm.Temperature), true, DataSourceUpdateMode.OnPropertyChanged);

nameof() 是一个语法工具,专门用来把变量/属性名变成字符串。

二、逐参数拆解(最关键)

我把这行拆成 5 个参数,一个一个讲:

1. "Text"

第一个参数:你要绑定控件的哪个属性

  • lblTemp.Text = 显示文字
  • 所以写 "Text"

如果是进度条,就写 "Value"如果是 checkbox,就写 "Checked"


2. _vm

第二个参数:数据源(谁的数据?)

  • 就是你的 ViewModel
  • 告诉程序:数据来自 _vm

3. nameof(_vm.Temperature)

第三个参数:数据源的哪个属性

  • nameof(变量) 是安全写法,自动生成字符串 "Temperature"
  • 意思:绑定 _vm.Temperature

4. true

第四个参数:是否启用格式化(可写 true 就行)

  • 官方含义:是否 formattingEnabled
  • 作用:让界面显示更干净
  • 上位机开发固定写 true

5. DataSourceUpdateMode.OnPropertyChanged

第五个参数:什么时候更新界面 → 最重要!

  • OnPropertyChanged = 属性一改变,立刻通知界面刷新
  • 这就是你之前问的:ViewModel 一调用 OnPropertyChanged,界面就自动更新

三、用最通俗的话翻译整行代码

csharp

运行

复制代码
lblTemp.DataBindings.Add(
   "绑定标签的Text属性",
   "数据来自这个ViewModel:_vm",
   "绑定VM的Temperature属性",
   "开启格式化",
   "Temperature一变,界面立刻刷新"
);

四、正确规则(上位机开发铁律)

1. 显示控件(Label、仪表盘)

  • 可以随便绑定
  • 多少个都没问题
  • 只读,不写数据

2. 输入控件(TextBox、NumericUpDown)

  • 可以绑定
  • 但必须设置 DataSourceUpdateMode.Never
  • 只显示,不自动写回 VM
  • 更不能自动写进传感器!
相关推荐
鑫 源10 分钟前
C#源码开源, 获取macOS 电池数据,包括iOS (xamarin开发)
c#·.net·xamarin
爱吃奥利奥_wen10 小时前
面向对象三板斧:封装、继承、多态,到底在“装“什么、“承“什么、“变“什么?
开发语言·经验分享·c#
正在走向自律11 小时前
AI数据分析与可视化:从基础到应用实践
服务器·人工智能·python·机器学习·数据分析·pandas
OnlineProxy12 小时前
亚马逊多账号运营:如何在规避“关联封号”风险的同时实现电商规模化扩张
服务器·数据库·redis
91刘仁德13 小时前
IP协议详解:从IP协议头到网段划分、路由与NAT
linux·服务器·网络·网络协议·tcp/ip
辻弋20113 小时前
五年前的旅行视频糊成马赛克?Video2X用Real-ESRGAN逐帧重建细节,但只支持Windows、集显用户建议直接放弃
服务器·数据库·windows·游戏引擎·电脑
工作10年+,存储芯片行业16 小时前
Linux NVMe 中断排查与性能优化:CPU 亲和性
linux·运维·服务器·windows·性能优化·ssd·pcie
一号弯17 小时前
装完LINUX,请先新建日常用户
linux·运维·服务器
许彰午17 小时前
03-Linux环境准备依赖包内核参数与用户组
linux·运维·服务器·数据库
一号弯19 小时前
Hyperv的LINUX虚拟机扩容
linux·运维·服务器