带有数据绑定的C#Windows 10 UWP嵌套列表视图

时间:2016-06-26 00:43:46

标签: c# xaml listview nested uwp

我有一个从网站上检索评论的应用。我可以通过编程方式将它们添加到StackPanel,计算它们的缩进以进行注释回复,但我想学习如何将注释列表绑定到ListView并让它在那里正确显示。

我的评论类看起来像这样:

    class Comment 
    {
        public List<Comment> Replies { get; set; }
        public string Body { get; }
        public int Level { get; set; }

        public Comment(string BodyText) 
        {
            Body = BodyText;
        }

        public Comment(string BodyText, List<Comment> replies, int level) 
        {
            Body = BodyText;
            Replies = replies;
            Level = level;
        }
    }

因此每个评论都可以有一个列表&lt;&gt;对它的评论(回复)和Level变量表示评论的深度。

设置ListView的过程是什么,以便我可以将注释列表绑定到它,这些注释会回复那些等等?或者有更好的方法吗?

谢谢。

这就是我目前实现的方式,它在视觉上是正确的,但我想使用数据绑定而不是通过代码来实现。

2 个答案:

答案 0 :(得分:0)

创建一个ListView,将其ItemsSource属性绑定到顶级注释列表。使用包含评论的ItemTemplate和垂直StackPanel中的另一个ListView。内部ListView需要获得相同的ItemTemplate。我不确定{StaticResource}是否会处理它,但它应该。

如果使用ObservableCollections,这实际上是动态的。

答案 1 :(得分:0)

我建议您使用第三方软件包WinRTXamlToolkit。其中包含一个可以很好地满足您的层次结构要求的TreeView控件。您可以将comments集合绑定到后面的TreeView控件代码。代码示例如下:

Xaml Code

 <controls:TreeView   Width="400"   MaxHeight="400" x:Name="Treeviewcomment">
     <controls:TreeView.ItemTemplate>
         <DataTemplate>
             <TextBlock Text="{Binding Body}"/>
             <data:DataTemplateExtensions.Hierarchy>
                 <data:HierarchicalDataTemplate ItemsSource="{Binding Replies}" />
             </data:DataTemplateExtensions.Hierarchy>
         </DataTemplate>
     </controls:TreeView.ItemTemplate>
 </controls:TreeView>

绑定代码

this.InitializeComponent();
ObservableCollection<Comment> comments = new ObservableCollection<Comment>
{
    new Comment ("By the way,I have noticed that ..."),
    new Comment("Has this been metioned anywhere before..",
    new List<Comment>
    {
        new Comment("Delta upgrade..."),
        new Comment("When only stuff that...",
            new List<Comment> {
                new Comment("That's blloby...")},
            3)},
    2),
    new Comment("Just had to turn off..")
};

结果:

enter image description here

uwp的特殊nuget包:WinRT XAML Toolkit。我还将上面的code example上传到GitHub。