You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

设置DataContext后PropertyChanged事件始终为null该如何解决

问题原因分析
  • 绑定配置错误:你当前的绑定逻辑将Source设置为_goal.Id(字符串类型的属性值),同时将Path设置为Text,相当于尝试绑定到字符串对象的Text属性,该属性不存在,绑定完全失效。
  • 没有对象订阅PropertyChanged事件:WPF绑定引擎只有在绑定配置正确、且对象实现INotifyPropertyChanged接口的前提下,才会自动订阅该事件。绑定失效后没有订阅者,因此PropertyChanged始终为null,不需要手动给该事件赋值。
修正方案

直接修改后台的绑定逻辑即可:

private Goal _goal;
public GoalControl()
{
    InitializeComponent();
    this._goal = new MyGoal();
    // 绑定配置修正:Source为目标Model对象,Path为Model上的属性名
    Binding binding = new Binding("Id");
    binding.Source = _goal;
    binding.Mode = BindingMode.TwoWay;
    Id.SetBinding(TextBox.TextProperty, binding);
}

因为你已经将控件的DataContext设置为_goal,也可以省略显式指定Source,写法更简洁:

private Goal _goal;
public GoalControl()
{
    InitializeComponent();
    this._goal = new MyGoal();
    this.DataContext = _goal;
    // 不指定Source时默认从DataContext查找属性路径
    Binding binding = new Binding("Id");
    binding.Mode = BindingMode.TwoWay;
    Id.SetBinding(TextBox.TextProperty, binding);
}
额外校验点
  • 确认MyGoal类显式继承了INotifyPropertyChanged接口,不要仅实现了事件和通知方法就遗漏接口继承。
  • 如果你需要在Id属性变更时执行额外自定义逻辑,可以在Model类中手动订阅PropertyChanged事件,但正常绑定场景下WPF会自动处理订阅逻辑,不需要手动操作。

内容的提问来源于stack exchange,提问作者digitig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 10:45:08