2009-08-05 4 views
0

ich eine einfache Listenansicht haben:Basislayout Probleme mit WPF Listview

<ListView Name="Container" > 

</ListView> 

1) I Artikel möchten vertikal aufgelistet werden, bis es Platz ist und dann eine andere Spalte zu füllen (Header nicht erforderlich) :

147 
258 
369 

ich Elemente programmatisch wie dies am Hinzufügen - aber sie angezeigt werden horizontal und dann auf die nächste Zeile gehen, wenn Raum abläuft:

foreach (Object obj in myCollection) 
{ 
    UIElement control = CreateListViewItem(obj); 
    this.Container.Items.Add(control); 
} 

2) Ich muss auch einfache Sortierung für die Liste implementieren (ein Wechsel zwischen/aufsteigend absteigend).

Ich habe es schwer, Antworten auf diese scheinbar einfache Abfrage zu finden!

Jede Hilfe wird geschätzt.

+0

Brauchen Sie ein wenig mehr Code zu sehen. Aus Ihrem Code-Snippet wird ersichtlich, dass Sie UIElements zu einem anderen Container hinzufügen - nicht zu Ihrem ListView. – Charlie

+0

korrigierter Typ - mein ListView-Name ist Container. Das sind 90% des Codes, den ich habe. Ich mache nicht viel anderes als das im Konstruktor meiner Seite. – JohnIdol

+0

Ich meinte * typO * nicht * typE * im Kommentar oben – JohnIdol

Antwort

2

1) Wenn Sie keine Header verwenden möchten, verwenden Sie stattdessen eine ListBox mit einem WrapPanel.

2) Warum fügen Sie einem Elementsteuerelement UIElement hinzu? Wahrscheinlich möchten Sie die Datenbindung verwenden. Besonders, wenn Sie sie sortieren wollen. Wie sortieren Sie UIElements?

Im Folgenden finden Sie einen Code, der Datenbindung verwendet. Hoffe du kannst es benutzen.

XAML:

<Window x:Class="ListViewTest.Window1" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
Title="Window1" Height="300" Width="300"> 
<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition /> 
    </Grid.RowDefinitions> 

    <Button Grid.Row="0" Content="Sort" Click="OnSort" /> 

    <ListBox Grid.Row="1" ItemsSource="{Binding Path=MyCollectionView}" 
     ScrollViewer.HorizontalScrollBarVisibility="Auto" 
     ScrollViewer.VerticalScrollBarVisibility="Disabled"> 
     <ListBox.ItemsPanel> 
      <ItemsPanelTemplate> 
       <WrapPanel Orientation="Vertical"/> 
      </ItemsPanelTemplate> 
     </ListBox.ItemsPanel> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Border BorderBrush="Red" BorderThickness="2" Margin="5"> 
        <TextBlock Text="{Binding}" /> 
       </Border> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

</Grid> 

-Code hinter:

using System.Collections; 
using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Data; 

namespace ListViewTest 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      List<object> myCollection = new List<object>(); 
      for (int i = 100; i <= 999; i++) 
      { 
       myCollection.Add(i); 
      } 

      MyCollectionView = new ListCollectionView(myCollection); 
      MyCollectionView.CustomSort = _mySort; 
      DataContext = this; 
     } 

     public ListCollectionView MyCollectionView { get; private set; } 

     private void OnSort(object sender, RoutedEventArgs e) 
     { 
      _mySort.Ascending = !_mySort.Ascending; 
      MyCollectionView.Refresh(); 
     } 

     private MySort _mySort = new MySort(); 

     private class MySort : IComparer 
     { 
      public bool Ascending { get; set; } 
      #region IComparer Members 
      public int Compare(object x, object y) 
      { 
       return x.ToString().CompareTo(y.ToString()) * (Ascending ? -1 : 1); 
      }  
      #endregion 
     } 
    } 
} 
+0

Danke - ich beginne mit WPF so was für die meisten Leute offensichtlich scheint, ist es noch nicht offensichtlich, da ich die Layoutkontrollen nicht gut kenne! Ich versuche es mal. – JohnIdol

+0

Um ein bisschen mehr von Informationen zu geben - ich zeige im Grunde eine Liste von Tags (sie müssen so angeordnet werden, wie ich in der Frage zeige) als Schaltflächen (erstellt in der CreateListViewItem Methode). – JohnIdol