我正在开发一个需要将自定义对象绑定到列表框项目的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
答案 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
- 您将很容易找到许多教程。