数据绑定+动态透视表

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;     
}

我希望使用数据透视表来显示菜单对象列表。根据列表中的项目数量动态创建 PivotItems。因此,每个 PivotElement 应该遵循相同的布局并具有相同的行为。布局模板和数据绑定如下所示:

    <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>

我在 .cs 文件中使用以下代码填充数据透视表:

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

当我将DataContext设置为Menu-Object时,数据绑定(通过xaml)不需要在这里再添加任何代码(我认为是这样的?)。现在的问题是; 它没有起作用... 通过调试器查看,它似乎创建的PivotItem与Mainpivot中定义的模板不同(或者我认为是这样的)。查看Mainpivot确实显示已添加了PivotItems,但仅此而已,我相信它们只是空的所有null PivotItems。在仿真器中执行时,它只显示一个空的Pivot。有什么想法吗? PS:作为初学者,我发现ViewModels非常令人困惑,因此我不使用它们。我不认为这与问题有任何关系?
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。它值得花时间去学习。


改变ItemsSource而不是foreach循环就完成了,非常感谢!这个类已经和你输入的一模一样了,但是省略了一些信息以便更容易阅读。谢谢!至于MVVM模型,我肯定会去学习的,但作为一个初学者,我觉得先让东西能够工作起来更有趣,然后在必要的时候再进行改进。 - Mathieu Hinderyckx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接