2009-06-01 7 views
1

was mache ich hier falsch? Ich versuche, eine DataTemplate mit einer Sammlung innerhalb des DataContext-Objekt zu erstellen, wie die folgenden:DataBinding mit DataContext

C#:

namespace StackOverflowTests 
{ 
    /// <summary> 
    /// Interaction logic for Window1.xaml 
    /// </summary> 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      this.DataContext = new People(); 
     } 
    } 

    class People 
    { 
     public List<Person> PersonList { get; set; } 

     public People() 
     { 
      this.PersonList = new List<Person>() 
      { 
       new Person(){FirstName = "Carlo", LastName = "Toribio" }, 
       new Person(){FirstName = "Guy", LastName = "Incognito" } 
      }; 
     } 
    } 

    class Person 
    { 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
    } 
} 

XAML:

<Window x:Class="StackOverflowTests.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="Window1" x:Name="window1" Height="300" Width="300"> 
     <Window.Resources> 
      <DataTemplate x:Key="peopleTemplate"> 
       <StackPanel> 
        <TextBlock Text="First Name" FontWeight="Bold" /> 
        <TextBlock Text="{Binding PersonList.FirstName}" /> 
        <TextBlock Text="Last Name" FontWeight="Bold" /> 
        <TextBlock Text="{Binding PersonList.LastName}" /> 
       </StackPanel> 
      </DataTemplate> 
     </Window.Resources> 
     <Grid x:Name="gridMain"> 
      <ItemsControl ItemsSource="{Binding}" ItemTemplate="{StaticResource peopleTemplate}" /> 
     </Grid> 
    </Window> 

Ich habe dies viel getan einfacher mit einer Klasse, die von Collection<T> erbt, aber aus vielen Gründen kann ich das nicht tun, um dieses Problem zu lösen. Jeder Vorschlag wird sehr geschätzt.

Danke!

Antwort

4

versuchen diese:

<Grid x:Name="gridMain"> 
    <ItemsControl ItemsSource="{Binding PersonList}" ItemTemplate="{StaticResource peopleTemplate}" /> 
</Grid> 
+0

Das funktionierte! Ich musste auch die PersonList aus und in der DataTemplate herausnehmen. Vielen Dank! – Carlo

+1

Sie müssen auch peopleTemplate ändern, um {Binding FirstName} anstelle von PersonList zu haben – Stephan

+0

@Carlo: richtig, ich habe das verpasst. Sry –