2011-04-15 236 views
0

我正在開發Windows Phone 7應用程序。將列表框綁定到表

我有一個表有以下欄目:

ID | Name | Description 

我想在ListBox顯示所有名稱表。我想確定用戶何時選擇一行並獲取其ID。

如何將ID存儲在ListBoxItem中?我該如何檢索它?

回答

1

假設你有每一行相應的數據對象(我們稱之爲MyDataRow現在),你的ListBox的的ItemsSource屬性設置爲您MyDataRow實例的集合。然後,在您的列表框中,將DisplayMemberPath設置爲名稱。這將使ListBox綁定到您的實際數據對象,但實際顯示名稱屬性的值。

當你處理的SelectionChanged事件的SelectedItem屬性的值將是你MyDataRow類的一個實例,所以你可以使用這樣的代碼獲得ID:

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

+0

和..我在哪裏可以學習做呢?我只有一個用XML文件創建的數據源。 – VansFannel 2011-04-15 14:59:59

+1

這應該有所幫助:http://www.windowsphonegeek.com/articles/data-binding-the-wp7-listpicker-to-xml-data-using-expressionblend-4 – 2011-04-15 15:04:22

+0

謝謝,它的工作。但我還有一個問題。在該表上我有另一列來表示語言(en,es,...)如何設置ItemsSource的where子句?或者我可以做一個看法? – VansFannel 2011-04-15 15:31:46

1

使用綁定是最好的方法。見我的代碼如下:

<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; } 
}