我在为模板化和数据绑定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,因为我发现它们作为概念非常混乱(作为初学者)。我不认为这与问题有什么关系吗?
答案 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。这是值得的。