Mam kilka elementów w moim viewmodel, które będę renderować w 3D przy użyciu Viewport3D. Odpowiednie fragmenty interfejsu jest zdefiniowany jako takie:Jak używać wiązania danych dla elementów 3D, takich jak Visual3D lub UIElement3D
<Viewport3D x:Name="viewport">
<Viewport3D.Children>
<!-- This is my custom control, deriving from UIElement3D -->
<local:myCollectionVisualizer Items="{Binding MyItems}" />
</Viewport3D.Children>
</Viewport3D>
(pominąłem światła i kamerę z XAML powyżej, ale oczywiście, że również tam w moim kodu)
Teraz chciałbym mój własny kontrolę zrenderować wszystkie elementy (z zdefiniowanej przez mnie właściwości zależności Items
) jako pojedyncze elementy umieszczone w lokalizacji określonej przez ich powiązany obiekt.
Moje dotychczasowe podejście polega na zastąpieniu GetVisual3DChild i powiązanych metod/właściwości, aby ustawić relację rodzic-dziecko dla moich produktów. Problem, przed którym stoję, polega na tym, że dane wiążą transformację translacji podrzędnej z wartościami zdefiniowanymi w moim powiązanym obiekcie. Ponieważ UIElement3D nie wywodzi się z FrameworkElement, nie ma metody SetBinding, a zatem nie ma wyraźnego sposobu na określenie powiązania z kodu.
Należy pamiętać, że wiązanie transformacji działa dobrze w XAML:
<Viewport3D x:Name="viewport">
<Viewport3D.Children>
<perspective:Spherical3D>
<perspective:Spherical3D.Transform>
<Transform3DGroup>
<!-- This works fine! -->
<TranslateTransform3D OffsetX="{Binding X}"
OffsetY="{Binding Y}"
OffsetZ="{Binding Z}" />
</Transform3DGroup>
</perspective:Spherical3D.Transform>
</perspective:Spherical3D>
</Viewport3D.Children>
</Viewport3D>
Jak mogę utworzyć wiązanie z powyższym kodem, kiedy nie ma dostępu do FrameworkElement.SetBinding?