2016-07-29 16 views
0

Nehmen wir an, ich möchte Informationen zu einer bestimmten Zeile eines ListView anzeigen (hier horizontal angezeigt, also technisch Spalten), um kalenderähnliche visuelle Informationen zu simulieren.WPF - Wie explizit den Index eines Elements in einem ListView festlegen?

Result structure

Erste Reihe ist eine Liste der Tageszahlen (1. bis 31. Juli).

Die beiden anderen Zeilen sind Zahlen aus zwei verschiedenen CSV-Exporten, wo ich zwei Zahlen für denselben Tag vergleiche.

Ich verwende eine erste ListView für Daten, die statisch bleibt, und zeigt eine Liste von ganzen Zahlen. Ich verwende eine andere ListView, die ein "DayData" -Modell enthält.

public class DayData 
{ 
    // Top number displayed 
    public float topNumber { get; set; } 

    // Bottom number displayed 
    public float bottomNumber { get; set; } 

    // Matching day for this entry 
    public int matchingDay { get; set; } 

    // Color used to alert user in case of bad ratio 
    public string color { get; set; } 

    /// <summary> 
    /// Initializes a new instance of the <see cref="T:System.Object"/> class. 
    /// </summary> 
    public DayData() 
    { 
     this.topNumber = -1; 
     this.bottomNumber = -1; 
    } 
} 

Nun mein Problem ist, wenn die verglichenen Zahlen für diesen Tag leer sind, möchte ich die Liste einen „leeren“ Eintrag anzuzeigen, oder zumindest eine Art von Marge zeigen die Zahlen korrekt auszurichten, so dass die DayData passt ihre passenden Tag-Nummer, etwa so:

Result wanted

Sie wahrscheinlich, würde vorschlagen, eine „null“ Eintrag in der Liste hinzuzufügen jedoch diese Performance-Probleme verursacht, als eine andere Listview das ganze veranstaltet, welches selbst mehrere Einträge von ListViews + anderen Sachen gleichzeitig anzeigt. Es gibt jedoch keine Probleme, wenn ich nur die DayData-Einträge anzeigen, da die ListView nie mehr als 20 auf einmal über einen Monat enthalten wird.

Gibt es eine Problemumgehung, wie ein Grid-Steuerelement mit Datentemplate, wo ich die Zeilen und Spalten selbst festlegen und sie an das DayData-Modell binden könnte, um sie korrekt auszurichten?

Vielen Dank im Voraus.

+0

Gibt es einen bestimmten Grund, dass Sie nicht Spalten mit ? – Gusdor

+0

Was meinst du damit? Ich kann Spalten innerhalb eines ListView nicht verwenden. Es gibt keine Vorstellung von Spalten und keiner von Zeilen. Nur von "Items", die automatisch gestapelt werden. –

+1

Allein eine 'ListView' verhält sich sehr ähnlich wie eine' Listbox'. Sie können die Darstellung von Elementen jedoch beliebig ändern, indem Sie die Eigenschaft "Ansicht" ändern. Die sofortige Implementierung ist 'GridView', mit der Sie Spalten verwenden können http://www.wpf-tutorial.com/listview-control/listview-with-gridview/ – Gusdor

Antwort

0

So würden Sie Spalten für jedes Element verwenden, die Ihr Problem verschwinden lassen, wie Sie die Spaltengröße ändern können. Listenansicht:

<ListView x:Name="testCaseView" HorizontalAlignment="Left" Height="737" Margin="0,182,0,0" VerticalAlignment="Top" Width="1914" FontFamily="Eras ITC" Foreground="Black"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding testCase}" Header="Test Case" Width="auto"/> 
       <GridViewColumn DisplayMemberBinding="{Binding condition}" Header="Condition" Width="auto"/> 
       <GridViewColumn DisplayMemberBinding="{Binding description}" Header="Description" Width="auto"/> 
       <GridViewColumn DisplayMemberBinding="{Binding expectedResults}" Header="Expected Results" Width="auto"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

C# erstellen ein Element alle Felder einer Zeile zu halten:

public class TestCaseItem 
{ 
    public String testCase { get; set; } 
    public String condition { get; set; } 
    public String description { get; set; } 
    public String expectedResults { get; set; } 
} 

Dann Listview füllen:

testCaseView.Items.Add(new TestCaseItem { testCase = "", condition = "", description = "", expectedResults = "" }); 
+0

Die Sache ist, ich kann sie nicht einfach manuell in XAML definieren. Ich sollte in der Lage sein, sie programmatisch je nach der Größe der Liste der Tage hinzuzufügen (die Anzahl der Tage in einem Monat kann variieren). –

+0

Sie möchten eine separate Spalte für jeden Tag für jeden Artikel? –

+0

Ja, werfen Sie einen Blick auf die Screenshots im ursprünglichen Beitrag. –