如何填充itemtemplate中的列表框

时间:2011-01-27 04:12:19

标签: c# xaml windows-phone-7

我正在学习XAML和Windows Phone 7的编程。 我试图为WP7 Pivot Control创建一个itemtemplate。我能够制作一个包含列表框的模板。是否可以在代码隐藏中访问此列表框,以便我可以根据自定义类的集合来填充它?基本上它是如何工作的,我有一个枢轴控件,该控件中的每个项目都是一个类别。对于添加的每个类别,都有一个属于该类别的项目列表。我需要能够使用该类别的项目填充每个枢轴项目上的列表。

我搜索了如何实现这一点的想法,我在数据绑定方面得到了很多例子,但我对XAML中数据绑定的工作方式不太熟悉。

数据绑定是否可行,或者我可以以某种方式获取对列表框的引用并自行添加项目? 任何帮助都会受到极大的关注!

谢谢

2 个答案:

答案 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.ViewModelMainViewModel的实例。

MainViewModel包含一个名为“Items”的ObservableCollection。这是与ListBox

中的个人PivotItem绑定的
<controls:PivotItem Header="first">
    <ListBox ItemsSource="{Binding Items}">
        ...
    </ListBox>
</controls:PivotItem>

在ListBox中,您可以参考“Items”集合的内容。

如果你想调整它以便为每个ListBox / PivotItem设置不同的集合,你可以调整它以在MainViewModel中拥有多个集合。

HTH。