如何使用INotifyPropertyChanged实现属性变更时自动执行代码
问题原因&解决方案
现存问题
- 未给
ValueChange实例的PropertyChanged事件绑定处理方法,事件触发后无对应订阅逻辑执行 ValueChange实例是按钮点击方法内的局部变量,方法执行完成后就会被回收,无法长期使用
修复代码
调整后的MainWindow逻辑
public partial class MainWindow : Window { // 将ValueChange改为窗口全局成员 private ValueChange _test; public MainWindow() { InitializeComponent(); // 实例化时就绑定PropertyChanged事件处理方法 _test = new ValueChange(); _test.PropertyChanged += PropertyChanged; } private void Button_Click(object sender, RoutedEventArgs e) { // 直接修改全局实例的属性即可触发事件 _test.Size = 10; } private void PropertyChanged(object sender, PropertyChangedEventArgs args) { switch (args.PropertyName) { case "Size": txtbox.Text = "some text"; // 其他自定义逻辑 break; } } }
可选优化点(ValueChange类)
你已经给OnPropertyRaised方法加了[CallerMemberName]特性,Size属性的set方法里不需要手动传属性名,直接调用OnPropertyRaised()即可,特性会自动获取调用方的属性名,后续改属性名也不需要手动修改传参:
public int Size { get { return _size; } set { _size = value; // 不需要手动传"Size"参数 OnPropertyRaised(); } }
内容的提问来源于stack exchange,提问作者Masterus
相关产品推荐
相关产品推荐

