假设我有三个班级:
BaseClassA,BaseClassB,ClassC。
流程如下:
ClassC:BaseClassB:BaseClassA。
ClassC是一个ViewModel,我绑定了一些在BaseClassA级别定义的Property(我们将它命名为SomeProperty)。
当我在视图ItemsSource = {Binding SomeProperty}
中写入时,绑定失败。
当SomeProperty在BaseClassB级别定义时,或者如果我在ClassC级别定义,例如,绑定工作正常。 SomeProperty {get {return base.SomeProperty}}
这样的行为是设计还是我错过了什么?
[UPD] 该属性是DomainCollectionView类型。 我更新了BaseClassA实例的OnLoadEntitiesCompleted方法中的属性。
以前我只有ClassC和BaseClassA对象,一切都运行得很好。 在引入中间层BaseClassB对象后,绑定停止工作。 它是DomainCollectionView特有的东西
我无法分享代码,所以我会发布有意义的部分。如果还不够,我愿意分享更多:
public abstract BaseClassA
{
protected DomainCollectionView CollectionView {get;}
}
public abstract BaseClassB : BaseClassA
public ClassC : BaseClassB
答案 0 :(得分:2)
假设您的示例准确无误:您的属性不是公开,因此绑定失败。
与你的继承没什么关系。
将其更改为:
public DomainCollectionView CollectionView {get;}
再试一次。
答案 1 :(得分:0)
你错过了什么。绑定到基类中的属性在SL中工作正常。例如,属性IsEnabled
在UIElement
中定义,Button
是{{1}}的第5级祖先。
答案 2 :(得分:0)
为什么要实现ClassC:SomeProperty除了委托给基类中同名的属性外什么都不做?对基类中定义的属性进行分解数据绑定的唯一方法是将它们设为私有或受保护。