与ListBox的自定义对象绑定

时间:2014-04-03 17:09:05

标签: windows-phone-8 listbox

我正在开发一个需要将自定义对象绑定到列表框项目的WP8项目。我是这样做的:

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

1 个答案:

答案 0 :(得分:0)

Once I've added a post可能会对你有所帮助 - 它适用于LLS,但对ListBox的作用相同。

您正在使用的ListBox通常与集合一起使用(例如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模式),但在你的简单例子中应该可以工作。

当您使用ObservableCollection时,您的ListBox会在您添加/删除项目时自动更新,但如果您更改其中的某些属性,则无法更新 - 为此,您需要实施INotifyPropertyChanged - 您将很容易找到许多教程。