在WPF中如何绑定到RectangleGeometry的ObservableCollection?

时间:2016-04-20 03:58:38

标签: wpf vb.net xaml binding

我需要显示一个RectangleGeometry矩形的集合,这些矩形将在ViewModel中添加和删除,因此我创建了一个RectangleGeometry对象的ObservableCollection并在GeometryGroup中绑定它们。

为了让我的问题看起来很简单,我创建了一个没有MVVM的非常简单的项目。即使我绑定到简单的代码隐藏,也不会出现矩形。我仍然处于WPF学习模式,所以如果你有更好的方法使用模板或其他方式,我非常开放。

xaml:

error

代码隐藏:

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        Title="MainWindow"
        Width="1024"
        Height="768"
        mc:Ignorable="d">
   <Grid>
      <Canvas>
         <Path Fill="Red" Opacity=".4">
            <Path.Data>
               <GeometryGroup Children="{Binding Rectangles}"
                              FillRule="NonZero" />
            </Path.Data>
         </Path>
      </Canvas>
   </Grid>
</Window>

1 个答案:

答案 0 :(得分:0)

你完全以错误的方式解决这个问题。一方面,您正在尝试直接构建GUI对象(即RectangeGeometry),然后另一方面尝试使用数据绑定。选一个。

如果您决定使用DataBinding,则为矩形对象创建数据结构,然后绑定到ObservableCollection。并且不要使用Canvas,使用ItemsControl并将其ItemPanel设置为Canvas。使用DataTemplate覆盖要绘制的项目的ItemTemplate,然后在ItemContainerStyle中设置Canvas.Left / Canvas.Top参数。