Don't manipulate the component tree. Instead, manipulate a model that represents the component tree. Then have your view bind to the various collections and properties in that model to produce its visuals.
What follows is a really simplified example. It just shows the concepts - please don't take it as indicative of how you should factor your code.
First, my model:
public abstract class Shape
{
public double Left { get; set; }
public double Top { get; set; }
}
public class Rectangle : Shape
{
public double Width { get; set; }
public double Height { get; set; }
}
Next, I expose a collection of said shapes (you would use another model to contain this collection). Then I bind to it in my view:
<Window x:Name="_root" x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="Window1" Height="300" Width="300">
<Window.Resources>
<DataTemplate DataType="{x:Type local:Rectangle}">
<Rectangle Width="{Binding Width}" Height="{Binding Height}" Stroke="Black"/>
</DataTemplate>
</Window.Resources>
<ItemsControl DataContext="{Binding ElementName=_root}" ItemsSource="{Binding Shapes}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding Left}"/>
<Setter Property="Canvas.Top" Value="{Binding Top}"/>
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
</Window>
HTH, Kent