Привязка ListBox к таблице - PullRequest
0 голосов
/ 15 апреля 2011

Я занимаюсь разработкой приложения для Windows Phone 7.

У меня есть таблица со следующими столбцами:

ID | Name | Description

Я хочу показать в ListBox все имена в табл.И я хочу определить, когда пользователь выбирает строку и получает ее идентификатор.

Как я могу хранить ID внутри ListBoxItem?И как я могу получить его?

Ответы [ 2 ]

1 голос
/ 15 апреля 2011

Лучше всего использовать переплет. Смотрите мой код ниже:

<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 Code:

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; }
}
1 голос
/ 15 апреля 2011

Предполагая, что у вас есть объект данных, связанный с каждой строкой (сейчас мы назовем его MyDataRow), задайте для свойства ItemsSource вашего ListBox коллекцию ваших MyDataRow экземпляров. Затем в вашем ListBox установите DisplayMemberPath на Имя . Это заставит ListBox связываться с вашими фактическими объектами данных, но при этом будет отображаться значение свойства Name .

Когда вы обрабатываете событие SelectionChanged , значение свойства SelectedItem будет экземпляром вашего MyDataRow класса, поэтому вы можете получить идентификатор, используя следующий код:

var id = ((MyDataRow)_myListBox.SelectedItem).ID;

...