我的视图元素(作为目标的PerspectiveCamera)和作为源的一个Transform3DGroup allTransform {get; set;}
常规.Net属性之间的数据绑定已经正常工作(WPF,C#,Net4.5)我的视角模型。我需要知道为什么/如何实际工作。在WPF中绑定到Transform3dGroup
Transform3DGroup在其子列表中有一个TranslateTransform3D对象。我改变这个TranslateTransform的污损特性我视图模型中:
// create my transform group
this.allTransforms = new Transform3DGroup();
this.translateToPos = new TranslateTransform3D();
allTransforms.Children.Add(translateToPos);
...
// updating the translation while rendering is done like this.
// X, Y, Z are just some properties of this class
this.translateToPos.OffsetX = this.X;
this.translateToPos.OffsetY = this.Y;
this.translateToPos.OffsetZ = this.Z;
所以绑定到该变换组照相机实际反应正常(含翻译)。在我对数据绑定的理解中,DependencyProperty能够通知任何更改的绑定属性,但是我的Transform3DGroup不是DependencyProperty,所以它是如何工作的? Transform3DGroup的子集合是DependencyProperty,但我不是更改集合,但只更新它的一个成员。 TranslateTransform3D中的OffsetX,OffsetY,OffsetZ属性实际上是DependencyProperty。那么他们的变更通知如何传播到拥有TransformGroup3D?
THX解释:这是密切相关的我的前一个问题http://stackoverflow.com/questions/24329448/xaml-databinding-to-regular-property但现在我看到细节。 – Michbeckable
详细地说,它实际上是基于Freezable类的。 Transform3D从Freezable派生而来,它本身是从DependencyObject派生的,但改变了默认的通知行为。当子属性发生更改时,可冻结对象始终发送更改通知。因此,如果Transform3D的实际Matrix3D发生更改,则该更改会传播到层次结构中,并且最高级别的Freezable会将最后一个更改通知发送给与其绑定的所有人。 – Michbeckable