2015-05-27 5 views
2

Я пытаюсь работать с 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 
     }); 
    } 
} 

ответ

2

вы не должны добавить коллекцию непосредственно CompositeCollection, но вы должны обернуть его в CollectionContainer:

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

Да, поскольку свойство коллекции первоначально равно нулю, вам необходимо обернуть элементы в явном элементе nt, как показано выше, что создает экземпляр коллекции. – Marshal

+0

Acutally это не работает, когда я это делаю и использую ItemControl.Resources. Я просто получаю вместо этого небольшой текст (полное пространство имен + имя-класса). Быть может, почему? – user1776562

Смежные вопросы