[WPF/VBNET] - Listview - Ajouté des items simplement ?
-
mardi 17 juillet 2012 20:10Auteur de réponse
Bonjour à tous,
j'essaie de me mettre au WPF via VB.NET on dit souvent que le WPF est très facile, mais là .... ?????
J’ai fait quand même pas mal de recherche sur le net sans trouver comment faire au plus simple.
Quand je crée une listview en WPF avec le concepteur, j'arrive à mettre les columns, puis à passer plus ou moins en mode détail ; puis quand j'essaie d'ajouter des items là c'est le parcours du combattant sans parler des subitems.j'ai bien réussi a ajouté un item dans le listview via XAML mais il me le duplique partout, de même quand je passe via le code vb
Mon listview est composé de 5 columns et j'essaie de remplir la première ligne (item et subitem) sans dupliquer mon ajout, comment faire ?
Cordialement,
Toutes les réponses
-
mardi 17 juillet 2012 21:53Modérateur
Bonjour,
Pouvez-vous nous montrer le code qui vous pose problème ?
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0 -
mercredi 18 juillet 2012 07:18Auteur de réponse
Bonjour Gilles,
Voila le resultat
Le code est relativement simple
XAML
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="242" Width="452"> <Grid> <ListView Height="159" HorizontalAlignment="Left" Margin="10,10,0,0" Name="ListView1" VerticalAlignment="Top" Width="410" ItemsSource="{Binding}"> <ListView.View> <GridView> <GridViewColumn Header="Columns 1" Width="80" /> <GridViewColumn Header="Columns 2" Width="80"/> <GridViewColumn Header="Columns 3" Width="80"/> <GridViewColumn Header="Columns 4" Width="80"/> <GridViewColumn Header="Columns 5" Width="80"/> </GridView> </ListView.View > <ListViewItem Content="test1" /> <ListViewItem Content="test2" /> <ListViewItem Content="test3" /> <ListViewItem Content="test4" /> <ListViewItem Content="test5" /> </ListView> </Grid> </Window>En VBNET le résultat est le même que l'image en haut.
Class MainWindow Sub New() ' Cet appel est requis par le concepteur. InitializeComponent() ' Ajoutez une initialisation quelconque après l'appel InitializeComponent(). End Sub Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded ListView1.Items.Add("test1") ListView1.Items.Add("test2") ListView1.Items.Add("test3") ListView1.Items.Add("test4") ListView1.Items.Add("test5") End Sub End Class
En Visual Basic Projet WinForm j'ai juste a faire :
Public Class Form1 Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load ListView1.Items.Add("test1") ListView1.Items.Add("test2") ListView1.Items.Add("test3") ListView1.Items.Add("test4") ListView1.Items.Add("test5") End Sub End Class
Pour obtenir :
J'aimerai avoir la même chose en WPF mais j'arrive pas a comprendre le fonctionnement
Cordialement,
-
mercredi 18 juillet 2012 23:31Modérateur
Bonjour,
Vous devez créer une classe qui contient les données à afficher (une instance de cette classe représente une ligne dans votre ListView et une propriété de cette classe représente une colonne de votre ListView).
Au niveau XAML il faut bindé les 2 colonnes via l'attribut DisplayMemberBinding :
<ListView Height="159" HorizontalAlignment="Left" Margin="10,10,0,0" Name="ListView1" VerticalAlignment="Top" Width="410" ItemsSource="{Binding}"> <ListView.View> <GridView> <GridViewColumn Header="Columns 1" Width="80" DisplayMemberBinding="{Binding Col1}" /> <GridViewColumn Header="Columns 2" Width="80" DisplayMemberBinding="{Binding Col2}"/> </GridView> </ListView.View > </ListView>Au niveau VB .NET il suffit de mettre ceci :
Class MainWindow Private Sub Window_Loaded(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles MyBase.Loaded Me.ListView1.Items.Add(New Data("Col1-1", "Col2-1")) Me.ListView1.Items.Add(New Data("Col1-2", "Col2-2")) End Sub Private Class Data Public Sub New(col1 As String, col2 As String) Me.Col1 = col1 Me.Col2 = col2 End Sub Public Property Col1 As String Public Property Col2 As String End Class End ClassCordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0- Marqué comme réponse TroxsaEditor jeudi 19 juillet 2012 22:09
-
jeudi 19 juillet 2012 08:55Auteur de réponse
Bonjour Gilles,
Effectivement c'est ce que j'avais fini par faire (trouver), je vois quand même des différences sur ce que j'ai pu faire (sur le code vb)
<Window x:Class="MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="224" Width="431"> <Grid> <ListView Height="159" HorizontalAlignment="Left" Margin="10,10,0,0" Name="ListView1" VerticalAlignment="Top" Width="385" ItemsSource="{Binding}" IsEnabled="True"> <ListView.View> <GridView> <GridView.Columns> <GridViewColumn Header="Columns1" Width="120" DisplayMemberBinding="{Binding Columns1}"/> <GridViewColumn Header="Columns2" Width="120" DisplayMemberBinding="{Binding Columns2}"/> <GridViewColumn Header="Columns3" Width="120" DisplayMemberBinding="{Binding Columns3}" /> </GridView.Columns> </GridView> </ListView.View > </ListView> </Grid> </Window>
et le code vb
Class MainWindow Sub New() ' Cet appel est requis par le concepteur. InitializeComponent() ' Ajoutez une initialisation quelconque après l'appel InitializeComponent(). End Sub Private Sub MainWindow_Loaded(sender As Object, e As System.Windows.RoutedEventArgs) Handles Me.Loaded ListView1.Items.Add(New lvComplet() With {.Columns1 = "Item1", .Columns2 = "item2", .Columns3 = "item3"}) End Sub End Class Class lvComplet Public Property Columns1 As String Public Property Columns2 As String Public Property Columns3 As String End ClassVous avez fait dans le Data un Sub New et vous avez appeler la class data depuis le load
InitializeComponent() n'est pas obligatoire en WPF, commet dans vb form ? (comme j'ai fait)
Cordialement,
- Modifié TroxsaEditor jeudi 19 juillet 2012 08:56
- Marqué comme réponse TroxsaEditor jeudi 19 juillet 2012 22:09
-
jeudi 19 juillet 2012 22:31Modérateur
Bonjour,
L'appel à InitializeComponent() dans le constructeur est obligatoire. Si vous supprimez le constructeur (Sub New) Visual Studio vous le rajoutera automatiquement à la compilation et il fera appel à InitializeCompoment().
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0

