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

使用Breeze.Sharp.BaseEntity时如何手动触发属性变更通知

解决方案

Breeze.Sharp.BaseEntity 已内置属性变更通知触发入口,无需自行实现INotifyPropertyChanged接口,可通过以下两种方式实现需求:

方式1:主动调用内置OnPropertyChanged方法

BaseEntity 提供了受保护的OnPropertyChanged(string propertyName)方法,专门用于手动触发属性变更通知,你的示例代码可修改为:

public class YourEntity : BaseEntity
{
    public double ItemAmount
    {
        get => GetValue<double>(nameof(ItemAmount));
        set
        {
            SetValue(value, nameof(ItemAmount));
            // 手动触发Total的变更通知
            OnPropertyChanged(nameof(Total));
        }
    }

    public int ItemQuantity
    {
        get => GetValue<int>(nameof(ItemQuantity));
        set
        {
            SetValue(value, nameof(ItemQuantity));
            // 手动触发Total的变更通知
            OnPropertyChanged(nameof(Total));
        }
    }

    public double Total => ItemAmount * ItemQuantity;
}

该方法触发的通知完全兼容Breeze的状态跟踪逻辑和前端绑定规则,和内置属性变更通知的效果完全一致。

方式2:通过SetValue重载指定关联属性

较高版本的Breeze.Sharp支持SetValue方法传入关联属性名数组,在当前属性变更后自动触发关联属性的变更通知,代码更简洁:

public double ItemAmount
{
    get => GetValue<double>(nameof(ItemAmount));
    set => SetValue(value, nameof(ItemAmount), new[] { nameof(Total) });
}

public int ItemQuantity
{
    get => GetValue<int>(nameof(ItemQuantity));
    set => SetValue(value, nameof(ItemQuantity), new[] { nameof(Total) });
}

public double Total => ItemAmount * ItemQuantity;

注意事项

  • 不要自行实现INotifyPropertyChanged接口,自定义实现的事件实例和Breeze内置事件不互通,会导致框架状态跟踪失效,前端也无法收到变更通知
  • 计算属性不需要调用GetValue/SetValue方法,直接实现业务逻辑即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 20:15:04