I am still very new and trying my first serious data binding. I have read a lot about how it works, am just struggling with this concrete example. I have tried to read all links I could find on this, but most sources tend to be a bit imprecise at key spots. So here goes:
-My Application generates dynamically a variable ‘PlayerList’ of type ‘List’, where ‘Player’ is a complex object.
-I want to display this in a ListBox via Binding. Obvoiusly, since Player is a complex Object I want to create a DataTemplate for it. So I have something like this in the ‘Window1.xaml’:
<ListBox
Name="ListBox_Players"
ItemsSource="{Binding Source={StaticResource PlayerListResource}}"
ItemTemplate="{StaticResource PlayerTemplate}">
</ListBox>
and something like this in the ‘App.xaml’:
<DataTemplate x:Key="PlayerTemplate"> <!-- DataType="{x:Type Player}" -->
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Path=name}"/>
<TextBlock Text=", "/>
<TextBlock Text="{Binding Path=nrOfTabls}"/>
</StackPanel>
</DataTemplate>
Of course, this template will become more verbose later. So as you see above, I have tried to create a resource for the PlayerList variable, but have not managed yet, i.e., smthn. like this
<src: XXX x:Key="PlayerListResource"/>
where for XXX as I understand it I should enter the class of the Resource variable. I tried
List<Player>, List<src:Player>
etc., but obv. XAML has trouble with the ‘<,>’ characters.
I also have another problem: By not declaring a resource but by direct binding (i.e., in C# writing “ListBox_Players.ItemsSource=PlayerList;”) and deleting the ‘ItemTemplate’ declaration and overwriting the ToString() method of the Player class to output the name of the Player I have managed to see that the binding works (i.e., I get a list of Player names in the ListBox). But then, if I insert the template again, it displays only ‘,’my Template does not work!
The fact that you’re getting just commas without anything else suggests to me that either the names of
Playermembers do not match the names inPath=in theDataTemplate(I had this problem at one point), or the relevantPlayermembers are inaccessible.I just tested what you’ve shown of your code so far, and it seemed to work fine. The only change I made was change this line:
to this line:
This tells the program that it’ll get the ItemsSource at run time.
My
Playerclass was:and my
MainWindow.xaml.cswas: