Я пытаюсь работать с ItemsControl и CompositeCollection, чтобы отображать различные фигуры на холсте, но с некоторыми проблемами с привязкой. Прямо сейчас я вижу только текст «Коллекция» («Коллекция») на моем «Холсте», поэтому заставило меня подумать, что я пытаюсь отобразить коллекцию.ItemsControl не отображает мои данные
Я не знаю, есть ли у меня проблемы с моими ресурсами или если я просто ошибаюсь здесь (например, пытаюсь отобразить целую коллекцию вместо каждого элемента), но будет доволен некоторыми указателями.
Если я изменяю «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
});
}
}
Да, поскольку свойство коллекции первоначально равно нулю, вам необходимо обернуть элементы в явном элементе nt, как показано выше, что создает экземпляр коллекции. – Marshal
Acutally это не работает, когда я это делаю и использую ItemControl.Resources. Я просто получаю вместо этого небольшой текст (полное пространство имен + имя-класса). Быть может, почему? – user1776562