Могу ли я связать модели представлений с ModelVisual3D и использовать шаблоны для представлений, как я могу с TreeView? - PullRequest
0 голосов
/ 22 февраля 2019

Есть ли способ использовать шаблон проектирования MVVM с трехмерной графической частью WPF?

Я хотел бы использовать ModelVisual3D таким же образом, как я использую TreeView, то есть я связываю ItemsSourceи укажите шаблоны для отображения.

Рассмотрите этот фрагмент xaml:

<ModelVisual3D ItemsSource="{Binding Model}">
    <ModelVisual3D.Resources>
        <HierarchicalDataTemplate DataType="{x:Type models:Group}" ItemsSource="{Binding Children}">
            <Model3DGroup>
                Not quite sure about this part, perhaps this would be implied
            </Model3DGroup>
        </HierarchicalDataTemplate>
        <DataTemplate DataType="{x:Type models:Box}">
            <GeometryModel3D>
                <GeometryModel3D.Geometry>
                    <MeshGeometry3D Positions="...cube..." Normals="...cube..." TriangleIndices="...cube..." />
                </GeometryModel3D.Geometry>
                <GeometryModel3D.Material>
                    <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                            <SolidColorBrush Color="{Binding Color}" />
                        </DiffuseMaterial.Brush>
                    </DiffuseMaterial>
                <GeometryModel3D.Material>
                <GeometryModel3D.Transform>
                    <TranslateTransform3D OffsetX="{Binding PosX}" OffsetY="{Binding PosY}" OffsetZ="{Binding PosZ}" />
                </GeometryModel3D.Transform>
        </DataTemplate>
        <DataTemplate DataType="{x:Type models:Sphere}">
            <GeometryModel3D>
                <GeometryModel3D.Geometry>
                    <MeshGeometry3D Positions="making up a sphere" Normals="...sphere..." TriangleIndices="...sphere..." />
                </GeometryModel3D.Geometry>
                <GeometryModel3D.Material>
                    <DiffuseMaterial>
                        <DiffuseMaterial.Brush>
                            <SolidColorBrush Color="{Binding Color}" />
                        </DiffuseMaterial.Brush>
                    </DiffuseMaterial>
                <GeometryModel3D.Material>
                <GeometryModel3D.Transform>
                    <TranslateTransform3D OffsetX="{Binding PosX}" OffsetY="{Binding PosY}" OffsetZ="{Binding PosZ}" />
                </GeometryModel3D.Transform>
        </DataTemplate>
    </ModelVisual3D.Resources>
</ModelVisual3D>

, где Children - это ObservableCollectionи Group, Box и Sphere все реализуют интерфейс I3DModelItem.

Возможно ли уже что-то подобное?Если нет, то будет ли очень сложно создать новый элемент управления, который позволяет это?

Я ни в коем случае не эксперт по WPF или MVVM, но был бы готов попробовать это с некоторыми (многоиз) руководство.

...