2010-09-30 4 views
0

Я пытаюсь связать коллекцию с ListBox, используя только XAML. Это вроде работает, но он отображает только MyProject.mainItem (это тип объекта) вместо фактических значений.Проблема с простой привязкой

В классе, который назначен в качестве DataContext, у меня есть это:

ItemCatalog.Add(new mainItem { Ref = "555555", ItemName = "First Item" }); 

В XAML на странице, которая имеет ListBox, у меня есть это:

<ListBox ItemsSource="{Binding ItemCatalog}"> 
     <DataTemplate> 
      <StackPanel Margin="0,0,0,17" Width="432"> 
        <TextBlock Text="{Binding Ref}" TextWrapping="Wrap" Foreground="Black" /> 
        <TextBlock Text="{Binding ItemName}" TextWrapping="Wrap" Margin="12,-6,12,0" Foreground="Black" /> 
      </StackPanel> 
     </DataTemplate> 
</ListBox> 

Он перебирает всю коллекцию ItemCatalog, но вместо отображения таких значений First Item он просто показывает тип объекта. спасибо

+0

Я раньше не работал с silverlight, но есть ли свойство DataSource или что-то для «TextBlock»? – EJC

ответ

3

Если у основного элемента нет визуального представления IE шаблона данных. Затем он вызовет ToString() этого объекта для отображения. Именно поэтому вы видите тип объекта.

Почему ваш шаблон данных не работает, потому что вы пытались вставить его, как и вы, ListBoxItem.

То, что вы хотите сделать, это переопределить ItemTemplate

<ListBox ItemsSource="{Binding ItemCatalog}"> 
    <ListBox.ItemTemplate> 
     <DataTemplate/> 
    </ListBox.ItemTemplate> 
</ListBox> 

Также вы хотите установить DataType свойство в DataTemplate к соответствующему типу.

Надеюсь, это поможет.

+0

Спасибо, вот и все. Я забыл добавить тег 'ItemTemplate'. – XSL

0

Код говорит, что DataTemplate является одним из элементов ListBox.

Попробуйте добавить метку <ListBox.ItemsTemplate> вокруг <DataTemplate>.

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