如何在属性的设置器中触发事件?
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
希望这一切对您有所帮助。
【讨论】:
以上是关于如何在属性的设置器中触发事件?的主要内容,如果未能解决你的问题,请参考以下文章
如何找到在 BigQuery 中触发设置事件之前触发的事件?