Можно ли связать свойство Canvas's Children в XAML?

Я немного удивлен, что невозможно установить привязку для Canvas.Children через XAML. Мне пришлось прибегнуть к подходу с выделенным кодом, который выглядит примерно так:

private void UserControl_Loaded(object sender, RoutedEventArgs e)
{
    DesignerViewModel dvm = this.DataContext as DesignerViewModel;
    dvm.Document.Items.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(Items_CollectionChanged);

    foreach (UIElement element in dvm.Document.Items)
        designerCanvas.Children.Add(element);
}

private void Items_CollectionChanged(object sender, NotifyCollectionChangedEventArgs e)
{
    ObservableCollection<UIElement> collection = sender as ObservableCollection<UIElement>;

    foreach (UIElement element in collection)
        if (!designerCanvas.Children.Contains(element))
            designerCanvas.Children.Add(element);

    List<UIElement> removeList = new List<UIElement>();
    foreach (UIElement element in designerCanvas.Children)
        if (!collection.Contains(element))
            removeList.Add(element);

    foreach (UIElement element in removeList)
        designerCanvas.Children.Remove(element);
}

Я бы предпочел просто установить привязку в XAML следующим образом:

<Canvas x:Name="designerCanvas"
        Children="{Binding Document.Items}"
        Width="{Binding Document.Width}"
        Height="{Binding Document.Height}">
</Canvas>

Есть ли способ сделать это, не прибегая к подходу с выделенным кодом? Я немного погуглил по этому вопросу, но пока не придумал много для этой конкретной проблемы.

Мне не нравится мой текущий подход, потому что он портит мою красивую Model-View-ViewModel, заставляя View знать о его ViewModel.

Ответы на вопрос(5)

Ваш ответ на вопрос