Если вы хотите, чтобы ваш Canvas, определенный в XAML, включал весь Canvas в ваш класс как отдельный элемент, вы можете написать:
<Canvas>
<ContentPresenter Content="{Binding ClassCanvas}" />
... other items here ...
</Canvas>
Если вы хотите, чтобы ваш Canvas, определенный в XAML, включал в себя все те же UIElements, что и Canvas, определенный в вашем классе, это невозможно, поскольку у UIElement может быть только один родительский элемент UIElement. Поэтому, если Canvas, определенный в классе, является родителем данного UIElement, Canvas, определенный в XAML, не может быть.
Если вы хотите, чтобы ваш Canvas отображал данные из каждого UIElement в Canvas, определенного в вашем классе, вы можете сделать это с помощью ItemsControl с панелью Canvas и DataTemplate:
<ItemsControl ItemsSource="{Binding ClassCanvas.Children}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl>
<ItemsControl.ItemsContainerStyle>
<Style>
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Left)}" />
<Setter Property="Canvas.Left" Value="{Binding (Canvas.Top)}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate>
... display of UIElement here, either using VisualBrush or custom display
</ControlTemplate>
<Setter.Value>
</Setter>
</Style>
</ItemsControl.ItemsContainerStyle>
</ItemsControl>
Обратите внимание, что этот код сканирует свойство Children только один раз, поскольку оно не является коллекцией INotifyCollectionChanged.
Если вы хотите привязать свойство в вашем классе, которое содержит коллекцию UIElements с установленными свойствами Canvas.Top и Canvas.Left, вы можете легко это сделать, если контейнер представляет собой ObservableCollection вместо Canvas.
Класс Canvas никогда не был предназначен для использования в вашем слое данных. Я настоятельно рекомендую вам переключиться на использование ObservableCollection и использовать Canvas только как часть вашего представления.