如何在派生类中捕获ObservableProperty属性的Changed事件?
在派生类中捕获ObservableProperty的属性变更事件
你可以通过实现匹配基类生成的partial方法签名来捕获属性变更事件,具体实现如下:
核心逻辑
CommunityToolkit.Mvvm的[ObservableProperty]特性会自动在基类中生成一个受保护的partial方法,命名规则为On{PropertyName}Changed。派生类只需实现同名且签名一致的partial方法,就能监听属性的变化。
正确代码示例
注意:新版本(8.0+)的Toolkit生成的变更方法包含旧值和新值两个参数,需严格匹配签名:
using CommunityToolkit.Mvvm.ComponentModel; partial class PersonVM : ObservableObject { [ObservableProperty] private bool isSelected = false; } class TeacherVM : PersonVM { // 完全匹配基类生成的方法签名 protected override partial void OnIsSelectedChanged(bool oldValue, bool newValue) { // 可选:调用基类的默认实现(若基类有自定义逻辑) base.OnIsSelectedChanged(oldValue, newValue); // 派生类自定义处理逻辑 if (newValue) { // 选中后的操作 } else { // 取消选中后的操作 } } }
关键注意点
- 签名必须严格匹配:方法名、参数类型和顺序不能出错。旧版本Toolkit可能仅生成单参数(仅新值)的方法,但建议升级到最新版本使用双参数签名,以获取完整的变更信息。
- 访问修饰符:保持
protected与基类生成的方法一致,同时可添加override(生成的方法默认是virtual,支持重写)。 - 基类逻辑继承:如果基类已实现该partial方法的部分逻辑,记得调用
base.OnIsSelectedChanged(...)以保留原有行为。
内容的提问来源于stack exchange,提问作者sfm
相关产品推荐
相关产品推荐

