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

如何在C#属性的setter中触发OnTrendPointChanged变更事件

实现方案

你需要先在类中声明对应事件,再在属性setter中值变更时主动触发事件,以下是修正后的完整可运行代码:

public class TestClass:ObservablePoint
{
    // 如需对外暴露事件供外部订阅可保留此行,不需要可删除
    public event EventHandler<ValueChangedEventArgs<string>> TrendPointChanged;

    private ITrendPoint trendPoint;
    public ITrendPoint TrendPoint{
        get{ return trendPoint ;}
        set{ 
            // 新旧值一致时不触发,避免无效执行
            if(trendPoint == value) return;
            this.trendPoint= value;
            // 触发事件,注意需将ITrendPoint对应的字符串值传入参数
            // 此处假设你的ITrendPoint有一个名为Value的string类型属性,按需替换为你实际的字段/属性名
            OnTrendPointChanged(this, new ValueChangedEventArgs<string>(trendPoint.Value));
        }
    }

    public void TestJob()
    {
        TrendPoint= Services.getTrendPoint();
    }

    private void OnTrendPointChanged(object sender, ValueChangedEventArgs<string> e)
    {
        // 如不需要对外暴露事件可删除下一行
        TrendPointChanged?.Invoke(sender, e);
        // 业务逻辑
        switch(e.Value)
        {
            case "HIGH":
                Log("TR HIGH");
                break;
            case "Low":
                Log("TR LOW");
                break;
            // 其他自定义条件
        }
    }
}

关键说明

  • 如果你不需要对外暴露事件供外部订阅,可以删掉声明的TrendPointChanged事件和对应的Invoke代码,直接在属性setter中调用OnTrendPointChanged方法即可
  • 原代码中的switch存在语法错误,C#中switch需要用大括号包裹,每个case分支必须加break/return等跳出语句,否则会出现编译错误
  • 如果你继承的ObservablePoint已经内置了INotifyPropertyChanged属性变更通知机制,也可以通过订阅PropertyChanged事件判断变更的属性是否为TrendPoint来执行对应逻辑,自定义事件的方式更直观高效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:06:07