XAML中的Binding本质是标记扩展,运行时动态建立UI属性与数据源连接,依赖非空DataContext和INotifyPropertyChanged通知机制实现数据驱动更新。
XAML中的Binding语法本质是通过标记扩展(Markup Extension)在运行时动态建立UI元素属性与数据源之间的连接,它不靠编译期硬编码,而是在加载XAML时解析表达式、创建Binding对象、绑定到当前DataContext,并监听变化触发更新。
写法如{Binding Name}或{Binding Path=Age, Mode=TwoWay, Converter={StaticResource IntToText}},花括号表示这是XAML标记扩展。它不会被当作字符串字面量处理,而是由XAML解析器识别为“请调用Binding类的构造/配置逻辑”。
这种机制让属性值可以延迟求值——目标属性(比如TextBlock.Text)实际接收的不是静态文本,而是一个Binding表达式对象,真正取值发生在数据上下文就绪之后。
Binding默认按隐式路径工作:{Binding FirstName}等价于{Binding Path=FirstName}。这个路径会从当前元素的DataContext出发,逐级查找公共属性:
User对象,就找User.FirstName
User.Address.Street
逗号分隔的name=value对用于设置Binding类的其他属性,顺序无关紧要(Path除外,它必须最前或显式写出):
OneTime/OneWay/TwoWay(默认OneWay)语法再正确,缺了这两点Binding也动不起来:
this.DataContext = new ViewModel();
INotifyPropertyChanged;双向绑定还要求有public set访问器没实现INotifyPropertyChanged?改了属性值,UI永远不刷新——这不是语法错,是运行时契约没满足。
基本上就这些。Binding看着是XAML里一行小字,背后连着解析、反射、事件监听、线程调度整套机制。写对语法只是起点,理解它怎么活起来才真正掌握数据驱动UI的核心。