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

Fody.PropertyChanged:手动触发RaisePropertyChanged时DependsOn属性失效

解决Fody.PropertyChanged手动触发RaisePropertyChanged时[DependsOn]属性不更新的问题

问题原因

Fody.PropertyChanged的[DependsOn]逻辑是编译时织入到属性setter方法中的:当你通过属性setter赋值时,Fody会自动注入代码,触发当前属性以及所有标记了[DependsOn]的关联属性的PropertyChanged事件。但如果直接修改底层字段再手动调用RaisePropertyChanged,并没有走属性的setter流程,Fody的自动关联逻辑不会生效,因此只有原属性会触发通知,依赖属性不会更新。

解决方案

1. 优先使用属性setter赋值(推荐)

这是Fody.PropertyChanged的设计预期用法,直接通过属性赋值,Fody会自动处理所有依赖属性的通知逻辑,无需手动操作:

public void SetDeviceStateTo(DeviceStates deviceState)
{
  DeviceState = deviceState; // Fody自动触发DeviceState和IsBusy的PropertyChanged事件
}

2. 必须修改底层字段时,手动触发依赖属性的通知

如果因为特殊场景必须直接修改底层字段,需要在触发原属性通知后,手动调用RaisePropertyChanged触发所有依赖属性的事件:

public void SetDeviceStateToAndRaisePropertyChangedAfterwards(DeviceStates deviceState)
{
  _DeviceState = deviceState;
  RaisePropertyChanged(nameof(DeviceState));
  RaisePropertyChanged(nameof(IsBusy)); // 手动触发依赖属性的更新
}

3. 移除冗余的INotifyPropertyChanged手动实现

你当前的代码中手动实现了INotifyPropertyChanged接口、PropertyChanged事件和RaisePropertyChanged方法,但已经添加了[PropertyChanged.AddINotifyPropertyChangedInterface]特性,Fody会自动为类生成这些代码,手动实现可能导致逻辑冲突或冗余。建议移除手动实现的部分,简化代码:

using System.ComponentModel;

namespace FodyPropertyChanged
{
  [PropertyChanged.AddINotifyPropertyChangedInterface]
  public class MainWindowViewModel
  {
    private DeviceStates _DeviceState;

    public DeviceStates DeviceState
    {
      get { return _DeviceState; }
      set { _DeviceState = value; }
    }

    [PropertyChanged.DependsOn(nameof(DeviceState))]
    public bool IsBusy
    {
      get { return DeviceState == DeviceStates.Working; }
    }

    public void SetDeviceStateTo(DeviceStates deviceState)
    {
      DeviceState = deviceState;
    }

    public void SetDeviceStateToAndRaisePropertyChangedAfterwards(DeviceStates deviceState)
    {
      _DeviceState = deviceState;
      RaisePropertyChanged(nameof(DeviceState));
      RaisePropertyChanged(nameof(IsBusy));
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:35:14