相关疑难解决方法(0)

是否可以在XAML中绑定Canvas的Children属性?

我有点惊讶的是,无法通过XAML为Canvas.Children设置绑定.我不得不采用代码隐藏方法,看起来像这样:

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);
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢在XAML中设置一个绑定,如下所示:

<Canvas x:Name="designerCanvas"
        Children="{Binding Document.Items}"
        Width="{Binding Document.Width}"
        Height="{Binding Document.Height}">
</Canvas>
Run Code Online (Sandbox Code Playgroud)

有没有办法在不采用代码隐藏方法的情况下实现这一目标?我已经完成了一些关于这个主题的谷歌搜索,但是对于这个具体问题还没有提出太多.

我不喜欢我当前的方法,因为它通过使View知道它的ViewModel来破坏我的漂亮的Model-View-ViewModel.

c# data-binding wpf canvas .net-3.5

57
推荐指数
5
解决办法
5万
查看次数

标签 统计

.net-3.5 ×1

c# ×1

canvas ×1

data-binding ×1

wpf ×1