结构
场景是我有一个 Pivot,其中每个项目都是某一天的菜单。在那个 PivotItem 中,我需要在菜单上显示菜肴,按类别分组(例如汤、甜点……)。
我已经使用 MVVM 模型实现了这一点。
因此,我有以下模型:
public class Menu{
public string Date;
public List<DishList> Categories;
}
public class DishList
{
public string Category;
public List<Dish> Dishes;
}
public class Dish
{
public string Name;
public string Price;
}
编辑:这些在这里被简化,每个字段的实际结构是这样的:
private string _date;
//Get_Set
public string Date
{
get
{
return _date;
}
set
{
if (value != _date)
{
_date = value;
}
}
}
所以结构将是这样的:一个 PivotElement 包含一个菜单对象。在其中,我展示了类别,即一些 DishList。在该 Dishlist 中,我显示了类别和不同的菜肴,每个都有它的名称和价格。使事情更清晰的模型(SkyDrive 上的 pdf 文件);http://sdrv.ms/12IKlWd
我有以下视图模型
public class MenuViewModel : INotifyPropertyChanged
{
private ObservableCollection<Menu> _Menus;
}
应实现所需布局(结构)的视图如下:
<phone:Pivot
ItemsSource="{Binding Menus}">
<phone:Pivot.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding Date}" />
</DataTemplate>
</phone:Pivot.HeaderTemplate>
<phone:Pivot.ItemTemplate>
<DataTemplate>
<ItemsControl
ItemsSource="{Binding Categories}">
<TextBlock
Text="{Binding Category}"/>
<ItemsControl
x:Name="Dishes"
ItemsSource="{Binding Dishes}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="300"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock
Grid.Column="1"
Text="{Binding Name}"/>
<TextBlock
Grid.Column="2"
Text="{Binding Price}"/>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</ItemsControl>
</DataTemplate>
</phone:Pivot.ItemTemplate>
</phone:Pivot>
如您所见,有嵌套的数据绑定来获取所需的数据。
然后我在页面上做的唯一代码是
DataContext = App.ViewModel;
问题
当我启动它时,我会在 PivotItems 标题中显示正确的数据,以及正确数量的 PivotItems。不幸的是,就是这样;PivotItem 的内容保持为空。因此,第一级数据绑定有效,但仅此而已。
我想的方式
- 第一级:每个 PivotItem 都链接到 Menu 类型的对象,标题为 Menu.Date
- 第二级:在那个 PivotItem 里面我将 ItemsControl 的 ItemsSource 设置为那个 Menu.Categories
- 第三级:ItemsSource 现在是 Menu.Categories.Dishes
我已经进行了相当多的搜索并摆弄了 Datacontext 和 ItemsSource 以及不同类型的“{Binding ...}”,但我无法让它工作。我想在 xaml 中进行绑定,而不是在代码隐藏中。
笔记
- 唯一的功能是显示数据。数据是固定的,并且从文件中加载一次。这就是我选择 ItemsControl 而不是 ListBox 的原因,不需要选择任何东西。
- 这是我上一个问题的 MVVM 方法:Databinding + Dynamic Pivot