【问题标题】: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 中调用该方法。
  • 您的问题实际上是如何使用新值构建事件参数?
  • @Fildor 感谢您提供的链接。
  • @Andy 好像我把整个代码 sn-p 弄错了。我的目标是能够在 TrentPoint 的值发生变化时执行一组操作。

标签: c# wpf events event-handling delegates


【解决方案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

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

【讨论】:

    猜你喜欢
    • 2016-04-04
    • 1970-01-01
    • 2013-04-09
    • 2013-08-30
    • 2012-11-23
    • 2011-12-26
    • 1970-01-01
    • 2011-07-14
    • 1970-01-01
    相关资源
    最近更新 更多