Windows phone 8 与ListBox的自定义对象绑定

Windows phone 8 与ListBox的自定义对象绑定,windows-phone-8,listbox,Windows Phone 8,Listbox,我正在处理一个WP8项目,该项目需要将自定义对象绑定到listbox项。我是这样做的: XAML文件: <ListBox x:Name="mMenuList"> <ListBox.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal" Tap="OnMenuListItemTapped" DataContext="{Binding

我正在处理一个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>
将它们结合在一起:

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

这可能会对您有所帮助-它适用于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;
ObservableCollection mycl=新的ObservableCollection();
//添加一些项目:
mycl.Add(新的PDFMenuItem{MenuTitle=“Title”,Dest=“1”,Visibility=Visibility.Visible});
//然后将其设置为列表框的ItemsSource
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
时,您的
列表框将在添加/删除项目时自动更新,但是,如果您更改其中的某些属性,它将不会更新-为此,您需要实现
INotifyPropertyChanged
-您将很容易找到许多教程。

为什么要将DataContext用于StackPanel并绑定到Dest?嗨,Romasz。根据您的回复,我发现问题不在于ObservableCollection,而在于StackPanel中的DataContext。一旦我搬走了房子,问题就解决了。谢谢你的帮助@AAAAlex是的,这是主要问题。在我看来,处理项目集合比处理ListBox.items本身更好。
<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>