2016-06-26 10 views
0

Ich habe eine App, die Kommentare von einer Website abruft. Ich kann sie programmatisch zu einem StackPanel hinzufügen und ihre Einrückung für Kommentarantworten berechnen, aber ich würde gerne lernen, wie man eine Liste von Kommentaren an eine ListView bindet und sie dort korrekt anzeigt.C# Windows 10 UWP Verschachtelte Listenansichten mit Datenbindung

Mein Kommentar Klasse sieht wie folgt aus:

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; 
     } 
    } 

jeder Kommentar So < eine Liste haben> Kommentare (Antworten) zu ihm und dem Level-Variable gibt die Tiefe des Kommentars.

Was wäre der Prozess zum Einrichten einer ListView, so dass ich eine Liste von Kommentaren an sie binden kann und diese Kommentare auf diese und so weiter antworten? Oder gibt es einen besseren Weg, dies zu tun?

Vielen Dank.

Dies ist, wie ich es derzeit implementiert habe, die visuell korrekt ist, aber ich würde gerne Datenbindung verwenden, anstatt es durch Code zu tun.

Antwort

0

ein Listview erstellen, binden sie ItemsSource Eigenschaft in die Liste der Top-Level-Kommentare ist. Verwenden Sie einen ItemTemplate, der den Kommentar enthält, und einen weiteren ListView in einem vertikalen StackPanel. Das innere ListView muss dasselbe bekommen ItemTemplate es ist in. Ich bin mir nicht sicher, ob {StaticResource} das handhaben wird, aber es sollte.

Wenn Sie ObservableCollections verwenden, wird dies tatsächlich dynamisch sein.

0

Ich empfehle Ihnen, die Drittanbieter-Paket WinRTXamlToolkit zu verwenden. Das enthält ein TreeView-Steuerelement, das Ihre Hierarchieanforderungen gut erfüllen kann. Sie können die Kommentarsammlung einfach an den dahinter liegenden TreeView-Steuerelementcode binden. Codebeispiel wie folgt:

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> 

Binding Code

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..") 
}; 

Und das Ergebnis:

enter image description here

Sonder nuget Paket für UWP: WinRT XAML Toolkit. Und ich lade auch die obigen code example zu GitHub hoch.

Verwandte Themen