I'm not a VB expert, but it looks like your Items property is not an array. I think it needs to be declared as follows.
Public Property Items() As My_Child()
Then, in the Compila_Class_My_Root method, when setting NodoRoot.Items, use an array here also:
Dim children As My_Child() = { NodoChild }
NodoRoot.Items = children
In your XAML, the HierarchicalDataTemplate's data context is a My_Root instance, which is why you can bind to a property of My_Root (Cod_Desc_Prod). ItemsSource should also be bound to a property of My_Root:
<Binding Path="Items" />
Alternatively, you can use a less verbose syntax:
<sdk:HierarchicalDataTemplate x:Key="MyNodeRoot" ItemsSource="{Binding Items}">
<TextBlock Text="{Binding Cod_Desc_Prod}" />
</sdk:HierarchicalDataTemplate>
Lastly, you need to specify how the children should look.
<DataTemplate x:Key="MyChildTemplate">
<StackPanel Orientation="Horizontal">
<CheckBox IsChecked="{Binding Selezione, Mode=TwoWay}" />
<TextBlock Text="{Binding Desc_PosFis}" />
<!-- Or whatever you want here... -->
</StackPanel>
</DataTemplate>
<sdk:HierarchicalDataTemplate x:Key="MyNodeRoot"
ItemsSource="{Binding Items}"
ItemTemplate="{StaticResource MyChildTemplate}"
>
<TextBlock Text="{Binding Cod_Desc_Prod}" />
</sdk:HierarchicalDataTemplate>