2014-04-03 96 views
0

我正在處理需要將自定義對象綁定到列表框項目的WP8項目。這裏是我正在做它:綁定ListBox的自定義對象

XAML文件:

<ListBox x:Name="mMenuList"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal" Tap="OnMenuListItemTapped" DataContext="{Binding Dest}"> 
       <TextBlock Text="{Binding MenuTitle}" Visibility="Visible" FontSize="20" MaxWidth="350" HorizontalAlignment="Left"/> 
       <Image Source="/Assets/img/search_next_icon.png" Width="20" Height="20" VerticalAlignment="Center" Visibility="{Binding Visibility}" HorizontalAlignment="Right" Tap="OnGotoChildIconTapped"/> 
      </StackPanel> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

和數據項的類:

public class PDFMenuItem 
{ 
    private String _menuTitle; 
    public String MenuTitle 
    { 
     get { return _menuTitle; } 
     set { _menuTitle = value; } 
    } 

    private int _dest; 
    public int Dest 
    { 
     get { return _dest; } 
     set { _dest = value; } 
    } 

    private Visibility _visibility; 
    public Visibility Visibility 
    { 
    get { return _visibility; } 
    set { _visibility = value; } 
    } 
} 

綁定在一起:

PDFMenuItem item = new PDFMenuItem(); 
item.MenuTitle = "Title"; 
item.Dest = "1"; 
item.Visibility = Visibility.Visible; 
mMenuList.Items.Add(item); 

隨着實現,StackPanel和Image的數據可以正確綁定,但沒有任何內容綁定到TextBlock。我應該如何糾正這一點?我也嘗試將所有項目添加到列表中,並將其設置爲mMenuList.ItemsSource。沒有改變。

B.R./Alex

+0

爲什麼你爲你的StackPanel使用DataContext並綁定到Dest? –

回答

0

Once I've added a post這可以幫助你 - 這是LLS但工作原理是一樣的列表框。

您正在使用的ListBox通常適用於Collections(例如List,ObservableCollection)。 您已經定義了項目類,確定,然後讓你的項目的集合:

ObservableCollection<PDFMenuItem> myCol = new ObservableCollection<PDFMenuItem>(); 
// add some items: 
myCol.Add(new PDFMenuItem { MenuTitle = "Title", Dest = "1", Visibility = Visibility.Visible }); 
// then set it as ItemsSource to your ListBox 
mMenuList.ItemsSource = myCol; 

你的XAML也需要稍加修改:

<ListBox x:Name="mMenuList"> 
<ListBox.ItemTemplate> 
    <DataTemplate> 
     <StackPanel Orientation="Horizontal" Tap="OnMenuListItemTapped"> 
      <TextBlock Text="{Binding MenuTitle}" Visibility="Visible" FontSize="20" MaxWidth="350" HorizontalAlignment="Left"/> 
      <Image Source="/Assets/img/search_next_icon.png" Width="20" Height="20" VerticalAlignment="Center" Visibility="{Binding Visibility}" HorizontalAlignment="Right" Tap="OnGotoChildIconTapped"/> 
     </StackPanel> 
    </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

我扔掉DataContext因爲這將是當您設置ItemsSource時自動設置。當然,它也可以做不同的方式(特別是如果你使用MVVM模式),但在你的簡單例子應該工作。

當您使用ObservableCollectionListBox會自動更新,當您添加/刪除的項目,但如果你在改變他們的某些屬性不會更新 - 爲此,你將需要實現INotifyPropertyChanged - 你會很容易發現許多教程。

+0

嗨羅馬茲。根據你的回覆,我發現這個問題不是關於ObservableCollection,而是關於StackPanel中的DataContext。一旦我刪除了財產,問題就解決了。感謝您的幫助! – AAAAlex

+0

@AAAAlex是的,這是主要問題。國際海事組織最好使用項目集合而不是ListBox.Items本身。 – Romasz