ItemsControl不显示我的项目

时间:2015-05-27 14:34:30

标签: c# wpf

我尝试使用ItemsControl和CompositeCollection在画布中显示不同的形状但是在绑定方面存在一些问题。现在我只看到文字"(收藏)"在我的画布中,这让我觉得我试图展示一个集合。

我不知道我的资源是否有问题,或者我是否只是在这里想错了(比如试图展示整个收藏品而不是每件商品)但是会很开心有一些指针。

如果我改变" ItemsControl.Resources" to" ItemsControl.ItemTemplate"它显示列表中的第一项,我只能使用一个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
        });
    }
}

1 个答案:

答案 0 :(得分:2)

你不能直接将Collection添加到CompositeCollection,但你必须将它包装到CollectionContainer中:

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