2014-06-23 35 views
0

我的视图元素(作为目标的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?

回答

1

你已经有答案了,让我来解释一下

不想更改属性allTransforms这是正常属性的值,但你操纵它的一个值的孩子变换属性,因此如何改变到达绑定相机?

一些事实

  • Transform3DGroup是一个DependencyObject的
  • 财产儿童Transform3DGroup的类型是Transform3DCollection这是DependencyObject的
  • 和实际的孩子TranslateTransform3D也DependencyObject的

所有的以上能够通知其母公司

所以当你永远修改translateToPos这是TranslateTransform3D

  • 它通知改变其父是Transform3DCollection
  • Transform3DCollection通知其父是在Transform3DGroup
  • Transform3DGroup通知这势必给它的相机。
  • 相机从Transform3DGroup接收最新的计算值,并作出相应的反应。

我希望我能再次

+0

THX解释:这是密切相关的我的前一个问题http://stackoverflow.com/questions/24329448/xaml-databinding-to-regular-property但现在我看到细节。 – Michbeckable

+0

详细地说,它实际上是基于Freezable类的。 Transform3D从Freezable派生而来,它本身是从DependencyObject派生的,但改变了默认的通知行为。当子属性发生更改时,可冻结对象始终发送更改通知。因此,如果Transform3D的实际Matrix3D发生更改,则该更改会传播到层次结构中,并且最高级别的Freezable会将最后一个更改通知发送给与其绑定的所有人。 – Michbeckable