将ListBox绑定到表

问题描述

| 我正在开发Windows Phone 7应用程序。 我有一个包含以下各列的表:
ID | Name | Description
我想在列表框中显示表中的所有名称。我想确定用户何时选择一行并获取其ID。 如何将ID存储在ListBoxItem中?我该如何找回呢?     

解决方法

假设您有与每一行关联的数据对象(我们现在将其称为
MyDataRow
),请将ListBox的ItemsSource属性设置为
MyDataRow
实例的集合。然后,在您的ListBox中,将DisplayMemberPath设置为Name。这将使ListBox绑定到您的实际数据对象,但实际显示Name属性的值。 当处理SelectionChanged事件时,SelectedItem属性的值将是
MyDataRow
类的实例,因此您可以使用以下代码获取ID:
var id = ((MyDataRow)_myListBox.SelectedItem).ID;
    ,使用绑定是最好的方法。请参阅下面的代码:
<ListBox x:Name=\"List1\">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition />
                    <ColumnDefinition />
                    <ColumnDefinition />
                </Grid.ColumnDefinitions>
                <TextBlock Text=\"{Binding ID}\" />
                <TextBlock Text=\"{Binding Name}\" Grid.Column=\"1\" />
                <TextBlock Text=\"{Binding Description}\" Grid.Column=\"2\" />
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

<TextBlock Grid.Row=\"2\" Text=\"{Binding ElementName=List1,Path=SelectedItem.ID}\" />
// CSharp代码:
public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();

        Collection<Entity> source = new Collection<Entity> { 
            new Entity{ID = \"1\",Name = \"Name1\",Description = \"This is Name1\"},new Entity{ID = \"2\",Name = \"Name2\",Description = \"This is Name2\"},new Entity{ID = \"3\",Name = \"Name3\",Description = \"This is Name3\"},};

        List1.ItemsSource = source;
    }
}

public class Entity
{
    public string ID { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}