WPF样式中数据绑定的时序问题及Behavior绑定异常排查
WPF DataGrid 即时验证+LostFocus数据库更新的实现问题
需求与初始可行方案
- 核心需求:在DataGrid中实现即时数据验证(绑定设置
UpdateSourceTrigger=PropertyChanged),同时在输入控件LostFocus时执行数据库更新逻辑。 - 初始实现:引入临时属性
TempProperty,将输入控件绑定到该属性并开启PropertyChanged触发验证;在LostFocus事件处理器中,把TempProperty的值同步到业务属性MainProperty,再触发数据库更新操作。该方案可正常工作。
用Behavior替代事件处理器的尝试
- 优化方向:编写
TextBoxLostFocusBehavior类替代传统事件处理器,通过第三方方案在样式中注入该Behavior,绑定MyCommand来完成TempProperty到MainProperty的同步。 - 问题点:Visual Studio编辑器中提示
MyCommand绑定的DataContext为空,但实际运行时DataContext是选中行对应的对象,命令也能正常执行。推测是绑定在DataContext被设置前就被求值,导致了假警告。
自定义DataGridTextColumn后的新问题
- 进一步优化:封装自定义列
DataGridTextColumnEx,新增FinalizeCommand依赖属性,让Behavior绑定该属性,避免为每个DataGridTextColumn重复定义样式。 - 新问题:
- Visual Studio同时提示
LostFocusCommand和FinalizeCommand的DataContext为空错误; - Behavior的
OnDetaching方法始终未被执行。
- Visual Studio同时提示
内容的提问来源于stack exchange,提问作者Istvan Heckl
相关产品推荐
相关产品推荐

