2010-06-30 12 views
5

Tengo un ListView con 3 jefes, declarada en XAML de la siguiente manera:¿Cómo puedo agregar mediante programación un ListViewItem de varias columnas sin ningún enlace de datos?

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

Quiero añadir programación un ListViewItem a este ListView, ser capaz de establecer el contenido dentro de la ListViewItem que pasar por debajo de la primera, segunda y tercera columnas individualmente Hasta ahora, solo he llegado hasta aquí:

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

Esto configura cada columna en la cadena "Contenido". ¿Cómo puedo cambiar el código anterior para poder agregar un ListViewItem que muestre "Contenido 1", "Contenido 2" y "Contenido 3" en la primera, segunda y tercera columnas, respectivamente? Traté de buscar una propiedad SubItem o ListViewSubItem dentro de ListViewItem, pero no encontré nada.

Supongo que hay una solución simple, pero quizás estoy equivocado. No mencione el enlace de datos, ya que solo quiero una respuesta a la cuestión de establecer programáticamente la propiedad de contenido para que refleje los cambios individuales en cada columna.

Muchas gracias.

Respuesta

12

Esto no es un enlace de datos. Piense en el enunciado Vinculante como un nombre para la columna.

<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> 

En código:

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

K funciona! Gracias. – Dalal

+0

¡Excelente! ¡Gracias! – Haris

+0

Esto solo funcionará cuando se conozca el número de columnas en tiempo de compilación. Todavía no he encontrado una solución para agregar una matriz de cadenas cuyo recuento se conoce en el tiempo de ejecución – Rajiv

0

En aquí es lo que haces.

Primero debe establecer los encabezados de las columnas, de lo contrario, no se mostrará nada. Agregue los elementos de vista de lista usando una matriz de cadenas.

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); 
    } 
} 

una captura de pantalla del resultado es

Scr

+2

Recibo este error: 'System.Windows.Controls.ListViewItem' no contiene un constructor que tome '1' argumentos. ' Estoy usando WPF. Tal vez me olvidé de especificar eso. Me gustaría que tu solución funcionara bien. Lo haría mucho más fácil. – Dalal

+1

ese código no funciona, el mismo error que se indicó anteriormente –

+0

¿Podría actualizar el enlace de la imagen? Está muerto ahora mismo. Thx – abalter

Cuestiones relacionadas