如何对Visual3D或UIElement3D等3D元素使用数据绑定

我在viewmodel中有一堆项目,我将使用Viewport3D在3D中渲染。 UI的相关部分定义如下:

      

(我从上面的xaml中省略了光线和相机,但当然在我的代码中也存在)

现在我希望我的自定义控件将所有项目(来自我定义的Items依赖Items属性)呈现为位于其绑定对象指定位置的单个UIElement3D元素。

到目前为止,我的方法是覆盖GetVisual3DChild和相关的方法/属性,以设置我的项目的父子关系。 我面临的问题是如何将子的转换变换数据绑定到绑定对象中定义的值 – 由于UIElement3D不是从FrameworkElement派生的,因此没有SetBinding方法,因此没有明显的方法来指定代码绑定。

请注意,绑定转换在XAML中工作正常:

             

当我无法访问FrameworkElement.SetBinding时,如何从代码创建上述绑定?

我找到了自己问题的答案,所以我在这里发布,以便其他人稍后查找此页面。

要在不是框架元素的事物上创建依赖项属性的绑定,可以使用静态BindingOperations.SetBinding方法。 就我而言,最终结果是这样的:

 var visual = new Spherical3D(); var tx = new TranslateTransform3D(); BindingOperations.SetBinding(tx, TranslateTransform3D.OffsetXProperty, new Binding("X") { Source = myDataObject }); BindingOperations.SetBinding(tx, TranslateTransform3D.OffsetYProperty, new Binding("Y") { Source = myDataObject }); BindingOperations.SetBinding(tx, TranslateTransform3D.OffsetZProperty, new Binding("Z") { Source = myDataObject }); visual.Transform = tx; Children.Add(visual); AddVisual3DChild(visual);