2010-06-30 7 views
5

J'ai un ListView avec 3 têtes, a déclaré en XAML comme suit:Comment puis-je ajouter par programmation un élément ListViewItem à plusieurs colonnes sans aucune liaison de données?

<ListView Name="myListView"> 
    <ListView.View> 
    <GridView> 
     <GridViewColumn Header="H1"/> 
     <GridViewColumn Header="H2"/> 
     <GridViewColumn Header="H3"/> 
    </GridView> 
    </ListView.View> 
</ListView> 

Je veux ajouter par programme un ListViewItem à ce ListView, être en mesure de définir le contenu dans le ListViewItem qui se tiendra sous le premier, deuxième et troisième colonnes individuellement. Jusqu'ici, je n'ai obtenu jusqu'ici que:

ListViewItem l = new ListViewItem(); 
l.Content = "Content"; 
myListView.Items.Add(l); 

Cela définit chaque colonne à la chaîne "Contenu". Comment puis-je modifier le code ci-dessus pour pouvoir ajouter un élément ListViewItem qui affichera respectivement «Contenu 1», «Contenu 2» et «Contenu 3» sous les première, deuxième et troisième colonnes? J'ai essayé de rechercher une propriété SubItem ou ListViewSubItem dans ListViewItem, mais n'a rien trouvé. Je suppose qu'il y a une solution simple, mais peut-être que je me trompe. Veuillez ne pas mentionner la liaison de données, car je souhaite uniquement obtenir une réponse à la question relative à la définition par programme de la propriété Content pour refléter les modifications individuelles dans chaque colonne.

Merci beaucoup.

Répondre

12

Il ne s'agit pas d'une liaison de données. Pensez à l'instruction Binding comme donnant un nom à la colonne.

<ListView Name="myListView"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn Header="H1" DisplayMemberBinding="{Binding Col1}"/> 
      <GridViewColumn Header="H2" DisplayMemberBinding="{Binding Col2}"/> 
      <GridViewColumn Header="H3" DisplayMemberBinding="{Binding Col3}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 

Dans le code:

myListView.Items.Add(new { Col1 = "test1", Col2 = "Test2", Col3="test3"}); 
+0

K ça marche! Je vous remercie. – Dalal

+0

Excellent! Merci! – Haris

+0

Cela ne fonctionne que lorsque le nombre de colonnes est connu au moment de la compilation. Je n'ai toujours pas trouvé de solution pour ajouter un tableau de chaînes dont le nombre est connu à l'exécution – Rajiv

0

En voici ce que vous faites.

Vous devez d'abord définir les en-têtes de colonne, sinon rien ne s'affichera. Ajoutez les éléments de la vue liste en utilisant un tableau de chaînes.

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 

     listView1.View=View.Details; 
     //Set Columns 
     listView1.Columns.Add("Col1"); 
     listView1.Columns.Add("Col2"); 
     listView1.Columns.Add("Col3"); 
     //Fill Rows 
     ListViewItem lvi; 
     lvi=new ListViewItem(new string[] { "A", "B", "C" }); 
     listView1.Items.Add(lvi); 
     lvi=new ListViewItem(new string[] { "D", "E", "F" }); 
     listView1.Items.Add(lvi); 
     lvi=new ListViewItem(new string[] { "G", "H", "I" }); 
     listView1.Items.Add(lvi); 
    } 
} 

une capture d'écran du résultat est

Scr

+2

Je reçois cette erreur: 'System.Windows.Controls.ListViewItem' ne contient pas un constructeur qui prend '1' arguments. ' J'utilise WPF. J'ai peut-être oublié de le préciser. Je souhaite que votre solution fonctionne bien. Cela rendrait tellement plus facile. – Dalal

+1

ce code ne fonctionne pas, même erreur comme indiqué ci-dessus –

+0

Pourriez-vous s'il vous plaît mettre à jour le lien de l'image? C'est mort maintenant. Thx – abalter