C# ItemsControl don';不要显示我的物品

C# ItemsControl don';不要显示我的物品,c#,wpf,C#,Wpf,我正在尝试使用ItemsControl和CompositeCollection在画布中显示不同的形状,但绑定有一些问题。现在我在画布上只看到文本“(Collection)”,这让我觉得我正在尝试显示一个集合 我不知道我的资源是否有问题,或者我只是在这里想错了(比如试图显示整个集合而不是每个项目),但如果有一些指针,我会很高兴 如果我将“ItemsControl.Resources”更改为“ItemsControl.itemstemplate”,它将显示列表中的第一个项目,并且我只能使用一个Dat

我正在尝试使用ItemsControl和CompositeCollection在画布中显示不同的形状,但绑定有一些问题。现在我在画布上只看到文本“(Collection)”,这让我觉得我正在尝试显示一个集合

我不知道我的资源是否有问题,或者我只是在这里想错了(比如试图显示整个集合而不是每个项目),但如果有一些指针,我会很高兴

如果我将“ItemsControl.Resources”更改为“ItemsControl.itemstemplate”,它将显示列表中的第一个项目,并且我只能使用一个DataTemplate,因此这并不好

代码如下所示,XAML:

<Grid>
        <ItemsControl ItemsSource="{Binding GraphData}">
           <ItemsControl.ItemsPanel>
                    <ItemsPanelTemplate>
                        <Canvas />
                    </ItemsPanelTemplate>
           </ItemsControl.ItemsPanel>
           <ItemsControl.Resources>
                    <DataTemplate DataType="model:Axle">    
                        <Line X1="{Binding StartX}" X2="{Binding EndX}" Y1="{Binding StartY}" Y2="{Binding EndY}"  Stroke="Black" StrokeThickness="2"/>
                    </DataTemplate>
            </ItemsControl.Resources>
        </ItemsControl>
</Grid>

在我的ViewModel中:

public class GraphViewModel : ViewModelBase
{
    public ObservableCollection<Axle> Axles { get; set; } 
    public CompositeCollection GraphData { get; set; }

    public GraphViewModel()
    {
        Axles = new ObservableCollection<Axle>();
        GraphData = new CompositeCollection { Axles };
        InitializeAxles();
    }

    private void InitializeAxles()
    {
        //X-axle
        Axles.Add(new Axle
        {
            StartX = 50,
            StartY = 530,
            EndX = 530,
            EndY = 530
        });
        //Y-axle
        Axles.Add(new Axle
        {
            StartX = 50,
            StartY = 0,
            EndX = 50,
            EndY = 530
        });
    }
}
public类GraphViewModel:ViewModelBase
{
公共可观测集合{get;set;}
公共CompositeCollection GraphData{get;set;}
公共图形模型()
{
轴=新的可观测集合();
GraphData=新的复合集合{axes};
初始化axles();
}
私有无效初始化AXES()
{
//X轴
轴。添加(新轴
{
StartX=50,
StartY=530,
EndX=530,
EndY=530
});
//Y轴
轴。添加(新轴
{
StartX=50,
StartY=0,
EndX=50,
EndY=530
});
}
}

您不能直接将集合添加到CompositeCollection,但必须将其包装到CollectionContainer中:

 GraphData = new CompositeCollection { 
     new CollectionContainer { Collection = Axles }
 };

是的,因为集合属性最初为null,所以您需要将项包装在一个显式元素中,如上图所示,该元素实例化集合。实际上,这不起作用,当我这样做并使用ItemControl时。参考资料我只得到一个小文本(整个命名空间+类名)。你知道为什么吗?