LongListSelector ListHeaderTemplate

时间:2014-02-28 09:53:30

标签: list windows-phone-8 longlistselector

我的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, 贾尼

0 个答案:

没有答案