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
- 更不能自动写进传感器!