如何使用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'在当前上下文中不存在"。。。正如我提到的,我对这项技术还很陌生。我能得到一些关于如何使这种嵌套绑定工作的建议、解决方案或资源吗?
谢谢!
这样做吧,
<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>
...