Itemscontrol仅显示集合的第一个元素

时间:2015-07-28 09:06:59

标签: c# wpf

我有ItemControl

<ItemsControl ItemsSource="{Binding CanvasCollection}">
                <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>                    
                      <Canvas Width="{Binding CanvasSize}" Height="{Binding CanvasSize}" Background="RoyalBlue" />                       
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemContainerStyle>
                <Style TargetType="ContentPresenter">
                    <Setter Property="Canvas.Left" Value="{Binding X}" />
                    <Setter Property="Canvas.Top" Value="{Binding Y}" />
                </Style>
            </ItemsControl.ItemContainerStyle>
            <ItemsControl.ItemTemplate>
                <DataTemplate DataType="{x:Type viewModels:VertexViewModel}">
                    <Thumb Width="11" Height="11">
                        <Thumb.Template>
                            <ControlTemplate>
                                <Ellipse Width="11" Height="11" Fill="{Binding Fill}" />
                            </ControlTemplate>
                        </Thumb.Template>
                    </Thumb>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
</ItemsControl>

目前有一个ObservableCollection的复合集合:

private ObservableCollection<VertexViewModel> Points { get; set; }
public CompositeCollection CanvasCollection { get; set; }

在调试时,我看到该集合包含两个元素,正如我所接受的那样,但首先只在Canvas上显示。当我在模型中调用Refresh()方法时,我看到绑定工作,但仅适用于第一个元素。

将Point添加到CompositeCollection:

Points = new ObservableCollection<VertexViewModel>();
        CanvasCollection = new CompositeCollection()
        {
            Points
        };

1 个答案:

答案 0 :(得分:0)

I had to use container for collectoin:

 CanvasCollection = new CompositeCollection
        {
            new CollectionContainer() {Collection = Points},
           Polygon,
        };