2009-08-05 6 views
0

J'ai simple Liste:problèmes de mise en page de base avec WPF ListView

<ListView Name="Container" > 

</ListView> 

1) Je voudrais des articles à la liste verticale jusqu'à ce qu'il ya de l'espace et pour remplir une autre colonne (en-tête non nécessaire) :

147 
258 
369 

Je suis d'ajouter des articles comme celui-ci programme - mais ils affichent horizontalement puis passez sur la ligne suivante lorsque l'espace s'écoule:

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

2) J'ai également besoin de mettre en œuvre un tri simple pour la liste (un basculement entre/croissant décroissant).

J'ai du mal à trouver des réponses à cette requête apparemment simple!

Toute aide appréciée.

+0

besoin de voir un peu plus de code. À partir de votre extrait de code, il apparaît que vous ajoutez des UIElements à un autre conteneur, et non votre ListView. – Charlie

+0

type corrigé - mon nom ListView est Container. C'est donner ou prendre 90% du code que j'ai. Je ne fais pas autre chose que cela dans le constructeur de ma page. – JohnIdol

+0

Je voulais dire * typO * pas * typE * dans le commentaire ci-dessus – JohnIdol

Répondre

2

1) Si vous ne voulez pas d'en-têtes, utilisez plutôt un ListBox avec un WrapPanel.

2) Pourquoi ajoutez-vous UIElement à un contrôle d'éléments? Très probablement, vous voulez utiliser la liaison de données. Surtout si vous voulez les trier. Comment trier UIElements?

Voici un code utilisant la liaison de données. J'espère que vous pouvez l'utiliser.

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 derrière:

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

Merci - Je commence avec WPF alors ce qui semble évident pour la plupart des gens ce n'est pas encore évident car je ne connais pas très bien les commandes de mise en page! Je vais essayer. – JohnIdol

+0

Juste pour donner un peu plus d'informations - J'affiche essentiellement une liste de balises (elles doivent être commandées comme je le montre dans la question) en tant que boutons (créés dans la méthode CreateListViewItem). – JohnIdol