我的WP8应用程序中有一个LongListSelector,带有ItemTemplate和HeaderTemplate以及 ObservableCollection列表和该列表中还有另一个列表。
视图模型:
Public MainViewModel()
{
this.FeedItems = new ObservableCollection<FeedItem>();
}
public ObservableCollection<FeedItem> FeedItems { get; private set; }
等等,
型号:
public class FeedItem : INotifyPropertyChanged
{
private int _index;
private string _AuthorName;
private ObservableCollection<FeedItemComment> _Comments;
public int index
{
get { return _index; }
set
{
if (_index != value)
{
_index = value;
OnPropertyChanged("index");
}
}
}
public string AuthorName
{
get { return _AuthorName; }
set
{
if (_AuthorName != value)
{
_AuthorName = value;
OnPropertyChanged("AuthorName");
}
}
}
public ObservableCollection<FeedItemComment> Comments
{
get { return _Comments; }
set
{
if (_Comments != value)
{
_Comments = value;
OnPropertyChanged("Comments");
}
}
}
等等
FeedItemComment与上面几乎相同
详细信息查看后面的代码,导航到事件
protected override void OnNavigatedTo(NavigationEventArgs e)
{
if (DataContext == null)
{
string selectedIndex = "";
if (NavigationContext.QueryString.TryGetValue("selectedItem", out selectedIndex))
{
int index = int.Parse(selectedIndex);
DataContext = App.ViewModel.FeedItems[index];
}
}
}
XAML,详细信息查看,请注意Feeditem和评论都有AuthorName字段。以下不起作用。 ListHeaderTemplate中的AuthorName不会出现。这可能是因为ItemSource设置为FeedItems,没有特定的HeaderSource
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="*"/> <!-- "*", otherwise scrolling is not working -->
</Grid.RowDefinitions>
<Grid x:Name="ItemGrid" Grid.Row="0" Margin="10,0,10,0">
<phone:LongListSelector x:Name="MainLongListSelector" Margin="0,0,0,0" ItemsSource="{Binding FeedItems}" SelectionChanged="MainLongListSelector_SelectionChanged">
<phone:LongListSelector.ListHeaderTemplate>
<DataTemplate>
<Border Margin="0,0,0,40" BorderThickness="2" BorderBrush="White" CornerRadius="10" Padding="10,10,10,15">
<StackPanel Margin="2,2,2,2">
<Grid x:Name="ItemGrid" ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding AuthorName}"
Padding="2"
Grid.ColumnSpan="5"
Grid.Column="1"
Grid.Row="0"
TextWrapping="Wrap"
VerticalAlignment="Center"
Style="{StaticResource PhoneTextNormalStyle}"/>
</DataTemplate>
</phone:LongListSelector.ListHeaderTemplate>
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Border Margin="0,0,0,40" BorderThickness="2" BorderBrush="White" CornerRadius="10" Padding="10,10,10,15">
<StackPanel Margin="2,2,2,2">
<Grid x:Name="ItemCommentGrid" ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="80"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<TextBlock Text="{Binding AuthorName}"
Padding="2"
Grid.ColumnSpan="5"
Grid.Column="1"
Grid.Row="0"
TextWrapping="Wrap"
VerticalAlignment="Center"
Style="{StaticResource PhoneTextNormalStyle}"/>
父列表是项目,子列表是注释,对于1个项目,可以有多个注释。
在主页面上,我有一个LongListSelector中的项目列表,当点击它时,我将所选项目打开到详细信息视图并列出其下的注释。
在详细信息页面上,我还有一个LongListSelector,我填充了itemtemplate中的注释和标题模板中的选定项目。
问题是我无法填充标题模板
当我导航到详细信息页面时,datacontext有1个选定的项目,然后作为子列表注释。
我可以通过只将注释作为LongListSelector和LongListSelector外的所选项来实现它,但这不是我想要的。
知道如何将数据传输到headertemplate。如果我设置ItemsSource =“{Binding Comments}”&gt; itemtemplate工作正常但标题缺少数据。
评论是评论列表(项目的子集合)
如何绑定headertemplate内的TextBlocks中的数据? 我尝试了几个版本,我发现谷歌和一些例子,但没有帮助
我曾尝试过例如
非常感谢任何帮助
BR, 贾尼