关于INotifyPropertyChanged实现中两个疑问的技术咨询
关于WPF中INotifyPropertyChanged的两个疑问解答
问题1:属性setter里判断字段与新值不等才更新的原因
去掉这个判断代码确实能运行,但这么做是为了避免无意义的性能消耗和不必要的逻辑触发:
- WPF的UI绑定会监听
PropertyChanged事件,只要事件触发,UI就会重新读取属性值并更新。如果新值和旧值完全一样,触发事件只会让UI做重复的刷新操作,白白浪费资源,尤其是在属性频繁更新的场景下,这种无效操作会累积成性能问题。 - 除了UI之外,可能还有其他代码订阅了这个事件(比如日志记录、业务逻辑联动),无意义的事件触发会导致这些代码也执行一遍,可能引发预期外的逻辑行为。
问题2:为什么调用OnPropertyChanged必须传字符串形式的属性名
OnPropertyChanged方法的参数类型是string,它需要接收属性的名称字符串来告诉绑定系统哪个属性发生了变化。直接写Make的话,编译器会把它当成一个变量名来解析,但你并没有定义名为Make的变量,所以会编译报错,自然无法生效。
不过现在推荐用nameof(Make)替代硬编码的字符串,它会在编译时自动转换成属性名的字符串,既避免了拼写错误,又能在属性重命名时自动同步修改,比直接写字符串更可靠。
内容的提问来源于stack exchange,提问作者Torrvic
相关产品推荐
相关产品推荐

