3

我在将 PivotItem 动态添加到模板化和数据绑定的 Pivot 时遇到问题。

正在使用的类(稍微简化以使其易于理解);

class Menu {
    string Name
    List<Dish> Dishes_1;
    List<Dish> Dishes_2;
    List<Dish> Dishes_3;    
}
class Dish {
    string Description
    string Price;     
}

我想使用 Pivot 来显示菜单对象列表。我根据该列表中的项目数动态创建 PivotItems。因此,每个 PivotElement 都应遵循相同的布局并表现相同。布局模板和数据绑定在 .xaml 中完成,如下所示;

    <phone:Pivot x:Name="Mainpivot">
        <phone:Pivot.HeaderTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding Name}" />
          </DataTemplate>
        </phone:Pivot.HeaderTemplate>    
        <phone:Pivot.ItemTemplate>
           <DataTemplate>
                <ListBox>

                    <TextBlock Text="Dishes_1"/>
                    <ListBox ItemsSource="{Binding Dishes_1}">
                        <ListBox.ItemTemplate>
                            <DataTemplate>
                                <Grid>
                                    <TextBlock Text="{Binding Description}"/>
                                    <TextBlock Text="{Binding Price}"/>
                                </Grid>
                            </DataTemplate>
                        </ListBox.ItemTemplate>
                    </ListBox>

                   // ...
                   // this is repeated 3 times; 
                   //a textblock and listbox per List<Dishes> in the Menu-class

                </ListBox>
            </DataTemplate>
        </phone:Pivot.ItemTemplate>
    </phone:Pivot>

我使用以下内容填充 de .cs 文件中的 Pivot:

foreach (Menu m in List_Menus) {
    PivotItem p = new PivotItem();
    p.DataContext = m;
    Mainpivot.Items.Add(p);
}

当我将 DataContext 设置为 Menu-Object 时,DataBinding(通过 xaml)在这里不需要更多代码(所以我认为?)。

现在的问题是;它不起作用...

通过使用调试器查看,创建的 PivotItem 的行为似乎与 Mainpivot 中定义的模板不同(或者我认为如此)。查看 Mainpivot 确实表明已添加 PivotItems,但仅此而已,我相信它们只是空的全空 PivotItems。在模拟器中执行时,它只显示一个空的 Pivot。

有什么想法吗?

//PS:我不使用 ViewModel,因为我发现它们(作为初学者)作为概念很混乱。我不认为这与问题有任何关系吗?

4

1 回答 1

4

这里有几件事。首先,要使您的绑定工作,您需要使用属性而不是字段。

public class Menu {
    public string Name {get;set;}
    public List<Dish> Dishes_1 { get; set; }
    public List<Dish> Dishes_2 { get; set; }
    public List<Dish> Dishes_3 { get; set; }   
}

public class Dish {
    public string Description { get; set; }
    public string Price { get; set; }     
}

接下来,而不是您的 foreach 循环将项目添加到枢轴,只需设置项目源:

Mainpivot.ItemsSource = List_Menus;

顺便说一句 - 你真的应该研究学习 MVVM。值得花时间。

于 2012-12-22T18:34:04.070 回答