我正在试图找出将属性更改传播到父类的最佳方法。
例如。
A类有B类清单。 B类有C类清单。 C类有一个名为“IsSelected”的属性
我希望在C类中更改“IsSelected”属性时通知A类。
我花了很长时间用Google搜索找到一个明确的解决方案。其中大多数都包括设置事件和触发器,这似乎有点麻烦......
我正在考虑的一个解决方案是使用一个观察者模式,其中类C存储观察者列表,即类A.类B只是将类A的引用传递给C以供其订阅。当“IsSelected”属性被更改时,它会通知订阅者。
这似乎不是解决这个问题的常用方法,因此我对提交它犹豫不决。我缺少这种设计是否有任何明显的缺陷?
答案 0 :(得分:1)
我不确定在这种情况下,观察者模式比引用或事件,任何其他模式都有任何优势。
根据您描述的简单情况,观察者或发布/订阅结构世界上没有任何错误,但是有其他解决方案可能适合您的解决方案,它只取决于您的设计约束
观察者模式的理想情况
您可以轻松证明以下解决方案的合理性
这真的取决于谁在制作这些子类以及如何/为什么,你 应该选择最适合概念设计的模式 你的模特;这是最直接,最容易维护的 在你的情况下。
答案 1 :(得分:0)
如果我理解你的问题,如果你想使用Observer模式
您可以在B中设置方法,并且只要Isselected
更改了调用b.CisSelectedChanged();
,因为您的C类中已经有B实例。再次在这个方法中再次调用A. Somethhign的另一种方法,就像这样
class C
{
bool isselected = true;// for example get a new value , should be notified
B b = new B();
b.CisSelectedChanged();
}
class B
{
public CisSelectedChanged()
{
A a = new a;
a.CisSelectedChanged();
}
}
这就是观察者模式的工作原理,但无论如何都需要通过更改属性的值来通知