Я бы порекомендовал совершенно другой подход, который, как я считаю, будет иметь ту же цель, что и вы, но удалит любую логику, специфичную для управления, из ваших моделей.
Во-первых, нам понадобится модель логического представления,представляет объекты на холсте.Давайте представим, что это страны, а холст - это карта.Возможно, виртуальная машина будет выглядеть так:
public class Country : PropertyChangedBase {
public string Name {get;set;}
public double X {get;set;}
public double Y {get;set;}
}
Я упустил биты INPC для простоты.Затем наша основная модель представления (докладчик из вашего вопроса) может выглядеть следующим образом:
public class Map : PropertyChangedBase {
public ObservableCollection<Country> Countries {get;set;}
}
Мы поместим красную точку на холсте для каждой страны.Если это так, то ваш соответствующий XAML может выглядеть так (без корневого элемента):
<ItemsControl ItemsSource="{Binding Countries}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Ellipse Fill="Red"
Width="16"
Height="16"
Canvas.Top="{Binding Y}"
Canvas.Left="{Binding X}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Если вам нужно обрабатывать события, просто подключите их в XAML как обычно.