跳转到主要内容

数据绑定

QWidget 的绑定是“源值 → Converter → 目标值”的管线。源可以是数据源、资源、输入控件、函数结果、命令结果、嵌套组件状态或组件尺寸。 默认是只读绑定,数据变化会刷新目标。声明了 Mode="TwoWay" 的输入控件会在目标变化时通过 ConvertBack 写回 Inputs。

两种写法

简写

  • {路径} 是插值标记。
  • 整个字符串只有一个绑定时保留原始类型(数字、布尔、对象、数组)。
  • 混合文本时转换为字符串。
  • 找不到路径时为空字符串。

显式 Binding

显式写法支持: 带逗号的参数要加引号:

路径语法

  • 大小写敏感:{data.Title} 与 {Data.Title} 不同。
  • 数组下标必须是十进制数字:Items.0。
  • 路径只读对象自有属性,不能访问 constructor、prototype、__proto__。
  • 路径缺失、类型不匹配或源尚未加载时返回空值。
  • 属性名不能包含点;带点的字段请通过对象嵌套访问。

命名空间

Data

  • 命名源:{Data.News.Title},也可以直接用 {News.Title}。
  • 未命名源默认名 Data,字段合并到 {Data.Title}。
  • 同名数据源由 XML 校验拒绝。
  • Data.Status.News:Loading / Completed / Error。
  • Async="True" 时先渲染空值,加载完成后自动刷新绑定。

Resources

资源类型 String / Bool / Number / Json / Binary 会保留对应类型;Binary 解析为 { Url, Base64, Mime, Size }。

Results

Children

只读子组件快照,包含 Inputs / Data / Results / Outputs / State。

Size 与 State

Size.Width / Size.Height 是网格列/行;Size.PixelWidth / Size.PixelHeight 是实际像素。State.Loading / State.Error 是布尔值。

类型规则

精确绑定保留类型,适合:

Converter

Converter 在绑定源与目标之间转换值,可做格式化、类型转换和双向回写。
内置类型见 Converter: String / Number / Bool / DateTime / Json / Format / Map / BoolToVisibility / Upper / Lower / Join / Script。

ConverterParameter

ConverterParameter 会覆盖 Converter 的默认 Format:

ConvertBack

Mode="TwoWay" 时,目标变化会调用 ConvertBack。当前支持双向回写的控件:
  • TextBox
  • CheckBox
  • Slider
回写目标是绑定路径中的 Inputs.<Name>;如果路径不是 Inputs.*,回退到控件 Name。ConvertBack 返回 undefined 表示本次不写回。

MultiBinding

  • Paths 用 | 分隔。
  • 多值 Converter 的 values 是数组。
  • Join 会连接全部值。
  • 当前输入控件的 MultiBinding 只把回写落到第一个路径。

Binding 在动作参数中使用

Arguments 先按 JSON 解析,再对字符串值做深度插值;整个字符串是一个绑定时保留原始类型。

列表作用域

  • {Item.*}:当前项,变量名由 As 决定。
  • {Index}:当前项下标,从 0 开始。
  • 嵌套 List 时内层覆盖 Item / Index。
  • List.Items 必须是数组;对象会显示空列表。

刷新与生命周期

  • 数据源变化后,绑定使用最新作用域重新计算。
  • Async="True" 不阻塞首屏;加载完成后绑定自动更新。
  • Data.Status.* 可用于加载态、错误态占位。
  • 远程更新只对可执行内容变化确认;普通数据/文本/布局变化静默替换。

编辑器支持

  • 输入 { 补全 Data / Resources / Inputs / Results / Children / Size / State。
  • 输入 {Binding 补全路径。
  • Converter= 补全当前 XML 中定义的 Converter 名称。
  • ConverterParameter 和 Converter 名称在 XML 解析期校验。

常见错误

  • 路径大小写错误:{data.Title} 与 {Data.Title} 不同。
  • 数据源未加载时绑定为空;用 If Test="{State.Loading}" 显示占位。
  • 静态 Data.Url / Data.Path 不支持运行时绑定;动态源使用 {Inputs.*}。
  • Converter 名称拼错会在解析期报 未知 Converter。
  • OneWay 控件修改不会写回;双向控件必须声明 Mode="TwoWay"。
  • MultiBinding 的 Paths 用 |,不是逗号。
  • 脚本 Converter 同步执行,不能做网络请求;远程脚本会进入可执行确认。

限制

  • 绑定路径只读对象属性,不支持方法调用、表达式或索引器语法。
  • 绑定是同步求值;Converter 不应做 I/O 或重计算。
  • Data 数据源静态 URL 不参与运行时绑定;动态 URL 使用 Inputs / Data 的有限形式。
  • XML 属性中的 < 要写成 &lt;。
  • 没有 Binding.DoNothing;需要忽略回写时让 ConvertBack 返回 undefined。