2011-03-10 24 views
1

如何让我的班级属性显示在列表框中?XAML列表框只显示班级名称

XAML:

<ListBox x:Name="lstPlayers" > 
    <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Player.FirstName}"></TextBlock> 
       <TextBlock Text="{Binding Player.LastName}"></TextBlock> 
      </StackPanel> 
    </DataTemplate> 
</ListBox> 

C#:

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


public void LoadPlayers() 
{ 
    foreach (Player player in Players) 
    { 
     lstPlayers.Items.Add(player); 
    } 
} 

,在列表框中显示出来的唯一的事情是

TestApplication1.Player 

回答

8

您在目前的实施中遇到了一些问题。首先,DataTemplate应放置在ListBox的ItemTemplate中。其次,每个ListBoxItem的DataContext将是Player的一个实例,因此您应该直接绑定到FirstNameLastName。第三,Player中的属性应该公开让DataBinding工作。

<ListBox x:Name="lstPlayers" > 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding FirstName}"></TextBlock> 
       <TextBlock Text="{Binding LastName}"></TextBlock> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 
public class Player 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

此外,而不是由项目加入集合项目的ListBox,只是将其设置为的ItemsSource

lstPlayers.ItemsSource = Players; 
+0

+1对于第二点,我看不到因为在iPhone上StackOverflow不显示滚动代码部分,我只能看到“ {绑定“... – 2011-03-10 10:13:52

+1

@Akash Kava:我一直在iPhone上遇到同样的问题,但我最近注意到,如果您用两个手指点击/按下代码,则可以滚动它。试试吧:) – 2011-03-10 10:18:26

+0

非常感谢,它的作品,太糟糕了直到约会没有人告诉我! – 2011-03-10 11:03:17

1

的DataTemplate应该是内部ListBox.ItemTemplate 。

1

设置的集合,球员的ItemSource

<ListBox x:Name="lstPlayers" > 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding FirstName}"></TextBlock> 
        <TextBlock Text="{Binding LastName}"></TextBlock> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
0

您必须将DataType添加到您的DataTemplate。

<DataTemplate DataType="{x:Type local:Player}"> 
     <StackPanel Orientation="Horizontal"> 
      <TextBlock Text="{Binding FirstName}"></TextBlock> 
      <TextBlock Text="{Binding LastName}"></TextBlock> 
     </StackPanel> 
    </DataTemplate> 

local是TestApplication1.Player的命名空间。你可以将数据模板设置为listebox.itemtemplate或作为任何“父对象”的资源