gpt4 book ai didi

c# - ItemsControl 不显示我的项目

转载 作者:太空宇宙 更新时间:2023-11-03 10:30:07 26 4
gpt4 key购买 nike

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

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

如果我将“ItemsControl.Resources”更改为“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
});
}
}

最佳答案

不能直接将Collection添加到CompositeCollection中,而是必须将其包装到CollectionContainer中:

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

关于c# - ItemsControl 不显示我的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30485624/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com