注意:我在 XAML 片段中省略了相机和灯光定义,主要关注真正的问题。
我想以类似于以下的方式将 绑定ObservableCollection到 WPF 的 3D 类之一(如ModelVisual3D):
<Viewport3D>
<Viewport3D.Children>
<Some3DClass ItemsSource="{Binding Objects}">
<Some3DClass.ItemTemplate>
<!-- definition of the template -->
</Some3DClass.ItemTemplate>
</Viewport3D.Children>
</Viewport3D>
Run Code Online (Sandbox Code Playgroud)
但是,经过一些研究和测试,我在 WPF 中没有发现任何类似的东西。
Helix 工具包是一个为 WPF 提供一组 3D 组件的库。此外,我发现其中一个示例 ( DataTemplate ) 声称提供了我所需要的。
下面是示例中 xaml 部分的类似实现:
<helix:HelixViewport3D>
<local:ItemsVisual3D ItemsSource="{Binding Objects}">
<local:ItemsVisual3D.ItemTemplate>
<DataTemplate3D>
<CubeVisual3D Center="{Binding Position}" SideLength="3" Fill="OrangeRed"/>
</DataTemplate3D>
</local:ItemsVisual3D.ItemTemplate>
</local:ItemsVisual3D>
</helix:HelixViewport3D>
Run Code Online (Sandbox Code Playgroud)
这个例子的工作归功于两个类:
ItemsVisual3D:扩展ModelVisual3D为包含IEnumerable ItemsSource依赖属性的类。它还包含一个DataTemplate3D来控制集合中单个元素的呈现。DataTemplate3D:一个自定义模板,派生自DispatcherObject使用 a …