C# 如何正确设计嵌套数据的事件?

C# 如何正确设计嵌套数据的事件?,c#,events,C#,Events,目前,我很难找到为API设计事件系统的合适方法 情况: 很少有包含大量基元类型变量的类(名为WPoint、CPoint、OPoint…)。所有变量都有属性和“已更改”事件。 有一个类(名为Frame),它包含许多基本类型变量,也包含少数类型为WPoint、CPoint。。。诸如此类。同样,所有变量都有属性和“更改”事件,包括*Point类型的变量 最后,还有一个名为FrameBox的类,它基本上是一个WinForm控件,包含Frame(Frame)类型的变量和获取/设置Frame元素的属性。Fr

目前,我很难找到为API设计事件系统的合适方法

情况: 很少有包含大量基元类型变量的类(名为WPoint、CPoint、OPoint…)。所有变量都有属性和“已更改”事件。 有一个类(名为Frame),它包含许多基本类型变量,也包含少数类型为WPoint、CPoint。。。诸如此类。同样,所有变量都有属性和“更改”事件,包括*Point类型的变量

最后,还有一个名为FrameBox的类,它基本上是一个WinForm控件,包含Frame(Frame)类型的变量和获取/设置Frame元素的属性。FrameBox类具有一些*PointElement属性,以简化在框架中访问一些经常需要的数据。类似地,它已经改变了*PointElement事件,因此可以将它们连接到设计器中的事件方法

问题: 所有数据都需要完全可供其他组件访问,以使整个工作顺利进行,并且所有系统都会崩溃,因为我想将事件回调到外部类,下面是一个示例:

frameBox.frame.wpoint.x = 4;
上述代码不仅需要调用
frameBox.frame.wpoint.XChanged
事件,还需要调用
frameBox.WPointXChanged
事件。由于数据需要可修改,我们应该能够执行
frameBox.frame=new frame()
frameBox.frame.wpoint=new wpoint()
。为Frame.*中的每个字段指定一个属性和事件将是一种过分的做法,而不是一种解决方案,因为变量/事件太多了

假设我们在FrameBox
FrameBox.frame.wpoint.XChanged+=FrameBox.WPointXChanged
的构造函数中注册了事件(到子类事件),当发生简单赋值时
FrameBox.frame.wpoint=newwpoint()
我们不再注册
FrameBox.WPointXChanged
。我无法强制*点构造函数获取事件参数,正如我之前所述,事件太多,这将导致代码膨胀


期待任何帮助,感谢任何人花时间帮助我解决这个问题

听起来像是设计问题,您不应该为每个变量更改使用事件,您应该实现
INotifyPropertyChanged
。而且,看起来很多*Point类都可以合并到一个泛型中。除此之外,您可能还想考虑为什么需要了解一些在执行中如此深入的东西,也许您太多地耦合了模型和视图,偏离了一个好的MVVM或MVC设计模式。您也可以使用事件冒泡而不是嵌套。@Ron通过谷歌搜索向我展示了如何实现属性,但仍然不确定我是否能够解决“外部回调”问题……听起来像是一个设计问题,您不应该为每个变量更改使用事件,您应该实现
INotifyPropertyChanged
。而且,看起来很多*Point类都可以合并到一个泛型中。除此之外,您可能还想考虑为什么需要了解一些在执行中如此深入的东西,也许您太多地耦合了模型和视图,偏离了一个好的MVVM或MVC设计模式。您也可以使用事件冒泡而不是嵌套。@Ron通过谷歌搜索向我展示了如何实现属性,但仍然不确定我是否能够解决“外部回调”问题。。。