我尝试使用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
});
}
}
答案 0 :(得分:2)
你不能直接将Collection添加到CompositeCollection,但你必须将它包装到CollectionContainer中:
GraphData = new CompositeCollection {
new CollectionContainer { Collection = Axles }
};