请解释 WPF 中绑定表达式(Binding Expressions)的概念,并说明在代码后置中如何创建、应用和管理绑定?
考察说明
考查对 WPF 数据绑定机制的掌握以及代码中操作绑定的能力。
回答思路
- 【回答框架 1】WPF 绑定表达式是 XAML 中 Binding 标记扩展在代码中的对应物,用于连接目标依赖属性与源数据源。核心是 Binding 类,它通过 Path 指定源属性路径,可配置 Mode(如 OneWay、TwoWay)、UpdateSourceTrigger 等属性。绑定机制由 BindingOperations 类管理,它提供绑定到目标属性的静态方法。
- 【回答框架 2】在代码中创建绑定通常先创建 Binding 对象,设置 Path 为 PropertyPath,指定 Source 或 ElementName,并可按需设置转换器、校验规则。关键方法:将 binding 赋值给目标对象的 SetBinding 方法(或使用 BindingOperations.SetBinding)。例如 textBox.SetBinding(TextBox.TextProperty, binding)。
- 【回答框架 3】管理绑定包括清除绑定:BindingOperations.ClearBinding(target, dp) 移除单个绑定;ClearAllBindings 移除所有。获取绑定:BindingOperations.GetBinding。检测绑定是否有效:BindingOperations.IsDataBound。在多线程或动态场景中,需注意绑定必须在 UI 线程操作。
- 【回答框架 4】绑定表达式强调数据流与变更通知:源需实现 INotifyPropertyChanged 才能使属性变化自动更新目标。若未实现,则源更新不会反映到目标,除非使用显式更新或设置合适的绑定模式。代码中可通过 BindingExpression 对象获取运行时绑定信息,如调用 UpdateTarget 或 UpdateSource 强制刷新。
- 【关键点 1】Binding 类对应 XAML 绑定,通过 SetBinding 方法应用到目标依赖属性。
- 【关键点 2】绑定模式可选 OneWay、TwoWay、OneTime、OneWayToSource,需根据数据流向选择。
- 【关键点 3】源对象必须实现 INotifyPropertyChanged 以支持自动更新。
- 【关键点 4】BindingOperations 提供 ClearBinding、GetBinding 等静态管理方法。
- 【易错点 1】忘记设置 UpdateSourceTrigger 可能导致默认 LostFocus 行为不符合预期。
- 【易错点 2】在代码中操作绑定必须确保在 UI 线程执行,否则引发异常。
- 【易错点 3】绑定源未实现 INotifyPropertyChanged 时数据变更无法自动同步,需手动刷新。