我有一个从网站上检索评论的应用。我可以通过编程方式将它们添加到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的过程是什么,以便我可以将注释列表绑定到它,这些注释会回复那些等等?或者有更好的方法吗?
谢谢。
这就是我目前实现的方式,它在视觉上是正确的,但我想使用数据绑定而不是通过代码来实现。
答案 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..")
};
结果:
uwp的特殊nuget包:WinRT XAML Toolkit。我还将上面的code example上传到GitHub。