如何在属性的设置器中触发事件?

Posted

技术标签:

【中文标题】如何在属性的设置器中触发事件?【英文标题】:How do I trigger an event in the setter of a property? 【发布时间】:2022-01-03 21:06:07 【问题描述】:

我有一个名为“TrendPoint”的 ITrendPoint 类型的属性。每当 TrendPoint 的值发生变化并执行一组操作时,我都需要引发“OnTrendPointChanged”事件。 我尝试了以下方法,但似乎无法继续:

  public class TestClass:ObservablePoint
  

    private ITrendPoint trendPoint;

    public ITrendPoint TrendPoint
        get return trendPoint ;
        set this.trendPoint= value;
       //Need to Call the event handler 
       // "OnTrendPointChanged"
        


     public void TestJob()
      
        //The TrendPoint is being set 
         // here
          TrendPoint= 
       Services.getTrendPoint();

      



         //The event handler
     private void 
     OnTrendPointChanged(object sender, 
     ValueChangedEventArgs<string> e)
     
        switch(e.value):
         case "HIGH":
         Log("TR HIGH");
         case "Low":
         Log("TR LOW");
       //Other such conditions
       .
       .
       .
 
      


我无法弄清楚当“TrendPoint”的值发生变化时如何让事件处理程序“OnTrendPointChanged”执行。任何帮助表示赞赏!

【问题讨论】:

您真的希望事件处理程序在同一个类中吗?对我来说没有意义。您也可以从 setter 中调用该方法。 或者你想要这样的东西:How to: Implement the INotifyPropertyChanged Interface 或 IObservable<T> Interface 您的问题实际上是如何使用新值构建事件参数? @Fildor 感谢您提供的链接。 @Andy 好像我把整个代码 sn-p 弄错了。我的目标是能够在 TrentPoint 的值发生变化时执行一组操作。 【参考方案1】:

我不清楚在您的代码中添加事件处理程序是否有任何意义。

把它放在一边。您似乎没有使用发件人,因此可以为空。也许您有一些代码使用了您没有向我们展示的代码。在这种情况下,您需要传递一些发送者将要进入的实例。从您提供的内容中不清楚这一点(顽皮)。

所以我们可以为发送者传递 null,但需要一个 valuechangedeventargs 实例来传递。

类似:

public ITrendPoint TrendPoint
    get return trendPoint ;
    set this.trendPoint= value;
        var vc = new ValueChangedEventArgs<TrendPoint>(this.trendPoint);
        OnTrendPointChanged(null, vc);
    

假设 OnTrendPointChanged 属于同一类。似乎来自您提供的内容,但也许不是。

如果处理程序在某个其他类中,那么您显然需要引用该类的一个实例。

我怎么知道 valuechangedeventargs 是这样工作的?我查了一下:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.visualstudio.language.intellisense.valuechangedeventargs-1?view=visualstudiosdk-2022

希望这一切对您有所帮助。

【讨论】:

以上是关于如何在属性的设置器中触发事件?的主要内容,如果未能解决你的问题,请参考以下文章

html 如何设置打开网页时自动触发按钮的单击事件

请问如何让timer控件每过一秒钟触发一次?

如何找到在 BigQuery 中触发设置事件之前触发的事件?

用`which`属性以编程方式触发keydown事件

WPF中XAML的触发器的属性,事件 都有那些?以及如何寻找

能触发文本框change事件的操作