数据绑定+动态枢轴

时间:2012-12-22 16:29:42

标签: windows-phone-7 windows-phone-7.1 windows-phone windows-phone-8

我在为模板化和数据绑定Pivot动态添加PivotItem时遇到了麻烦。

正在使用的类(稍微简化一下,以便快速理解);

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:我不使用ViewModels,因为我发现它们作为概念非常混乱(作为初学者)。我不认为这与问题有什么关系吗?

1 个答案:

答案 0 :(得分: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;
BTW - 你真的应该研究学习MVVM。这是值得的。