WPF Canvas, como adicionar filhos dinamicamente com o código MVVM por trás

Requerimento:

Para desenhar uma imagem de bitmap (de 1024 x 1024 pixels) e retângulo (s) com base na coleção de pontos. O retângulo deve caber exatamente no local dos pixels sobre a imagem. Há também alguns textos que precisam ser adicionados dentro do retângulo.

A imagem será sempre apenas uma e os retângulos serão adicionados dinamicamente.

Solução Atual:

Tenha uma canvas com o controle de imagem. Adicione o código dynamic no código por trás do arquivo ViewImageResult.xaml.cs.

private void DrawResult(int left, int right, int width, int height) { Border bord = new Border(); bord.BorderThickness = new Thickness(1); bord.BorderBrush = Brushes.Red; bord.Width = width; bord.Height = height; _mainCanvas.Children.Add(bord); Canvas.SetLeft(bord, left); Canvas.SetTop(bord, right); } 

Questão:

Como eu sigo o padrão MVVM, a coleção de pontos para o retângulo está no meu arquivo ViewModel ViewImageResultModel.cs. Eu não sou capaz de adicionar o retângulo filho dinamicamente a partir do arquivo ViewModel.

Qualquer ajuda é muito apreciada.

desde já, obrigado

ItemsControl é seu amigo:

                   

O exemplo acima assume que sua VM expõe uma coleção de pontos por meio de uma propriedade Points e que cada VM de ponto possui propriedades X , Y , Width e Height .

Adicionado IsItemsHost="True" para a solução do Canvas de Kent: