如何使用Windows Phone(Pivot和ListBox)嵌套数据绑定

本文关键字:ListBox 嵌套 数据绑定 Pivot 何使用 Windows Phone | 更新日期: 2023-09-27 17:58:01

我对在Windows Phone中使用DataBinding概念很陌生。我试图将一个数据透视页面与一个项目列表绑定,并将每个数据透视项目中的ListBox与另一个(标准)列表绑定。我有一个包含以下XAML的页面:

<phone:Pivot Name="ItemsPivot" Title="MY APPLICATION">
  <phone:Pivot.ItemTemplate>
    <DataTemplate>
        <StackPanel  Margin="12,17,0,28">
            <ListBox Name="CriteriasListBox" >
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Orientation="Vertical" >
                            <TextBlock Text="{Binding Name}"/>
                            <tk:Rating />
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>
        </StackPanel>
    </DataTemplate>
  </phone:Pivot.ItemTemplate>
</phone:Pivot>

然后,我尝试在C#代码中指定每个绑定控件的ItemSource,如下所示:

...
ItemsPivot.ItemsSource = ItemList;
CriteriasListBox.ItemsSource = CriteriaList; // <-- CriteriasListBox not accessible !!
...

但有一个错误指出"名称'CriteriasListBox'在当前上下文中不存在"。。。正如我提到的,我对这项技术还很陌生。我能得到一些关于如何使这种嵌套绑定工作的建议、解决方案或资源吗?

谢谢!

如何使用Windows Phone(Pivot和ListBox)嵌套数据绑定

这样做吧,

<UserControl.Resources>
<DataTemplate x:Key="MyPivotItemTemplate">
   <controls:PivotItem Header="first" >
                <ListBox x:Name="CriteriasListBox" Margin="0,0,12,0" ItemsSource="{Binding CriteriaList}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal" Height="132">
                                <TextBlock Text="{Binding Name}" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </controls:PivotItem>
</DataTemplate>
</UserControl.Resources>

然后在你的中枢

<Pivot ItemsTemplate="{StaticResource MyPivotItemTemplate}" Items="{Binding ItemList}"

如果不同项目有不同的条件列表,其中一种方法是将条件列表属性添加到PivotItemViewModel中。你的c#代码看起来像这个

ItemsPivot.ItemsSource = ItemList;

其中ItemList中的每个项目都包含CriteriaList。你的xaml代码看起来像

<phone:Pivot Name="ItemsPivot" Title="MY APPLICATION">
    <phone:Pivot.ItemTemplate>
        <DataTemplate>
            <StackPanel  Margin="12,17,0,28">
                <TextBlock Name="PivotTextBlock" Text="{Binding Name}"/>
                <ListBox ItemsSource="{Binding Criterions}">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Vertical" >
                                <TextBlock Name="ListTextBlock" Text="{Binding Name}"/>
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>
            </StackPanel>
        </DataTemplate>
    </phone:Pivot.ItemTemplate>
</phone:Pivot>

PivotTextBlock的绑定从PivotItemViewModel检索Name属性。ListTextBlock的绑定从Criteria检索Name属性。

如果标准列出了您的应用程序中唯一的是一个良好的开始

这是我发现的另一个好方法。。。

http://www.codeproject.com/Articles/47229/A-LINQ-Tutorial-WPF-Data-Binding-with-LINQ-to-SQL

下面是一个代码片段:

<DataTemplate DataType="{x:Type LINQDemo:Category}">
  <Border Name="border" BorderBrush="ForestGreen" 
     BorderThickness="1" Padding="5" Margin="5">
    <StackPanel>
      <TextBlock Text="{Binding Path=Name}" 
           FontWeight="Bold" FontSize="14"/>
      <ListView ItemsSource="{Binding Path=Books}" 
           HorizontalContentAlignment="Stretch" BorderThickness="0" >
        <ListView.ItemTemplate> 
          <DataTemplate>
            <TextBlock>
              <Hyperlink Click="LoadIndividualBook" 
                  CommandParameter="{Binding}" 
                  ToolTip="Display book details">
                <TextBlock Text="{Binding Path=Title}"/></Hyperlink>
   ...