我正在学习XAML和Windows Phone 7的编程。 我试图为WP7 Pivot Control创建一个itemtemplate。我能够制作一个包含列表框的模板。是否可以在代码隐藏中访问此列表框,以便我可以根据自定义类的集合来填充它?基本上它是如何工作的,我有一个枢轴控件,该控件中的每个项目都是一个类别。对于添加的每个类别,都有一个属于该类别的项目列表。我需要能够使用该类别的项目填充每个枢轴项目上的列表。
我搜索了如何实现这一点的想法,我在数据绑定方面得到了很多例子,但我对XAML中数据绑定的工作方式不太熟悉。
数据绑定是否可行,或者我可以以某种方式获取对列表框的引用并自行添加项目? 任何帮助都会受到极大的关注!
谢谢
答案 0 :(得分:0)
我对主题有一些考虑:
1)如果您通过绑定填充类别列表,那么您没有保证绑定的入口点(因为绑定以延迟方式执行)。
2)使用ItemTemplate的内容比DataTemplate方法更棘手,更不可靠,你应该在独家情况下使用它。 LogicalTreeHelper和VisualTreeHelper类将帮助您。
3)但我建议您基于DataTemplates构建视图,因为这是WPF中的常见做法。你真的认为这段代码很复杂吗?
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow">
<Window.Resources>
<DataTemplate x:Key="InnerItemDataTemplate">
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
<DataTemplate x:Key="CategoryDataTemplate">
<StackPanel>
<ListView ItemsSource="{Binding InnerItems}"
ItemTemplate="{StaticResource InnerItemDataTemplate}"/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView ItemsSource="{Binding Categories}"
ItemTemplate="{StaticResource CategoryDataTemplate}"/>
</Grid>
public class Category
{
public IEnumerable<InnerItem> InnerList
{
get{/*...*/}
}
}
class InnerItem
{
public string Name
{
get{/*...*/}
}
}
public class SampleModel
{
public IEnumerable<Category> Categories
{
get {/*...*/}
}
}
答案 1 :(得分:0)
如果您创建新的“Windows Phone Pivot应用程序”,默认代码会显示此示例,但会在多个pivotitems中重复使用列表框中的相同项目。
以下是该示例代码正在执行的操作以及如何更改它的概述。
在MainPage的构造函数中,DataContext
设置为一个对象(App.ViewModel)。
MainPage的这个Loaded
事件可确保填充App.ViewModel
。
App.ViewModel
是MainViewModel
的实例。
MainViewModel
包含一个名为“Items”的ObservableCollection
。这是与ListBox
:
PivotItem
绑定的
<controls:PivotItem Header="first">
<ListBox ItemsSource="{Binding Items}">
...
</ListBox>
</controls:PivotItem>
在ListBox中,您可以参考“Items”集合的内容。
如果你想调整它以便为每个ListBox / PivotItem设置不同的集合,你可以调整它以在MainViewModel中拥有多个集合。
HTH。