2014-06-23 36 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