问题描述
|
我正在开发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; }
}