How to Bind a Hierarchical Data Structure to helix toolkit SharpDX.Core GroupModel3D

68 Views Asked by At

I have this collection in my MainViewModel

 private ObservableCollection<BoneNodeViewModel> _bones= new ObservableCollection<BoneNodeViewModel>();
 public ObservableCollection<BoneNodeViewModel> Bones
 {
     get => _bones;
     set => SetProperty(ref _bones, value);
 }

Where Bones is represented in Hierarchical tree where each BoneNodeViewModel has a collection of children and each child has children and so on

 public class BoneNodeViewModel : ObservableObject
 {

     private MyBone _bone;
     public MyBone Bone
     {
         get { return _bone; }
         set
         {
             if (SetProperty(ref _bone, value))
             {
                 if (_bone != null)
                 {
                     // Register PropertyChanged event handler
                     _bone.PropertyChanged += MyBone_PropertyChanged;
                 }
             }
         }
     }
     private ObservableCollection<BoneNodeViewModel> _children;
     public ObservableCollection<BoneNodeViewModel> Children
     {
         get { return _children; }
         set
         {
             if (SetProperty(ref _children, value))
             {
                 OnPropertyChanged(nameof(BoneNames));
             }
         }
     }
    
     private Transform3D _parentTransform = Transform3D.Identity;
     public Transform3D ParentTransform
     {
         get { return _parentTransform; }
         set
         {
             if (SetProperty(ref _parentTransform, value))
             {
                 if (_parentTransform != null)
                 {

                 }
             }
         }
     }

     private Transform3D _boneTransform;
     public Transform3D BoneTransform
     {
         get { return _boneTransform; }
         set
         {
             if (SetProperty(ref _boneTransform, value))
             {
                 if (_boneTransform != null)
                 {

                 }
             }
         }
     }
     private MeshGeometry3D _bonegeometry;

     public MeshGeometry3D BoneGeometry
     {
         get { return _bonegeometry; }
         set
         {
             if (SetProperty(ref _bonegeometry, value))
             {

             }
         }
     }

//
}

I am trying to Bind Bones Collection to GroupModel3D in HelixToolkit.Wpf.SharpDX.core project
to create a MeshGeometryModel3D for each BoneNodeViewModel recursively

in my model i defined the Transform3D and the Geometry required

my attemp was to create a item template with HierarchicalDataTemplate

the template worked correctly but only for the level 1 children

i.e., only for the children collections of the Bones collection direct items

                               <hx:GroupModel3D x:Name="Bones">
                                    <hx:ItemsModel3D x:Name="BonesitemsModel" ItemsSource="{Binding Bones}">
                                        <hx:ItemsModel3D.ItemTemplate>
                                            <DataTemplate>
                                                <hx:ItemsModel3D ItemsSource="{Binding Children}">
                                                    <hx:ItemsModel3D.ItemTemplate>
                                                        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
                                                            <hx:MeshGeometryModel3D CullMode="None" Geometry="{Binding BoneGeometry}">
                                                                <hx:MeshGeometryModel3D.Material>
                                                                    <StaticResource ResourceKey="SilverPhongMaterial" />
                                                                </hx:MeshGeometryModel3D.Material>
                                                            </hx:MeshGeometryModel3D>
                                                        </HierarchicalDataTemplate>
                                                    </hx:ItemsModel3D.ItemTemplate>
                                                </hx:ItemsModel3D>
                                            </DataTemplate>
                                        </hx:ItemsModel3D.ItemTemplate>
                                    </hx:ItemsModel3D>
                                </hx:GroupModel3D>


how to make the template to work for all BoneNodeViewModel in my collection recursively ?

 
0

There are 0 best solutions below