C#实现INotifyPropertyChanged的类属性set与OnPropertyChanged未触发问题
问题根因
你在FetchFoo返回的异步委托中,直接对私有字段_isLoading赋值,完全没有调用公开的IsLoading属性,所以属性的set访问器永远不会被触发,断点自然也命中不了。
你写的对应代码:
return() => Task.Factory.StartNew(()=> { _isLoading = true; // 直接修改私有字段,跳过属性set逻辑 businesslogic(ctx); _isLoading = false; // 同样直接修改私有字段 });
修复方法
把字段赋值改为属性赋值,就可以触发set访问器里的通知逻辑:
return() => Task.Factory.StartNew(()=> { IsLoading = true; // 调用属性,触发set访问器 businesslogic(ctx); IsLoading = false; // 调用属性,触发set访问器 });
额外优化建议
你现在是在后台线程中修改IsLoading属性,而PropertyChanged事件会触发UI更新,绝大多数UI框架(WPF、WinForms、MAUI等)都不允许跨线程修改UI绑定的属性,你已经提前捕获了SynchronizationContext,建议用该上下文把属性赋值操作封送回原线程执行,避免触发跨线程操作异常。
内容的提问来源于stack exchange,提问作者chikun
相关产品推荐
相关产品推荐

