Я бы порекомендовал совсем другой подход, который, как я полагаю, будет иметь тот же конец, которого вы желаете, но удалит любую логику управления, зависящую от ваших моделей.
Во-первых, нам понадобится модель логического представления, которая представляет объекты на холсте. Давайте притворимся, что это страны, а холст - карта. Возможно, vm будет выглядеть так:
public class Country : PropertyChangedBase {
public string Name {get;set;}
public double X {get;set;}
public double Y {get;set;}
}
Я пропустил биты INPC для простоты. Далее, наш мастер ViewModel (презентатор из вашего вопроса), может выглядеть следующим образом:
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, как обычно.