【问题标题】:Databinding + Dynamic Pivot数据绑定 + 动态枢轴
【发布时间】:2012-12-22 16:29:42
【问题描述】:

我在将 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,因为我发现它们(作为初学者)作为概念很混乱。不过,我认为这与问题无关?

【问题讨论】:

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


    【解决方案1】:

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

    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模型;这绝对是我会做的事情,但作为初学者,我觉得先让一些东西发挥作用,然后在你有了工作基础后在必要时进行改进会更有趣。
    猜你喜欢
    • 2017-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多