Advertisement
elGuille

WpfListView (acceder sin SubItems) código para C# 5.0

Dec 27th, 2012
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.96 KB | None | 0 0
  1. //-----------------------------------------------------------------------------
  2. // Ejemplo de ListView usando WPF para Desktop                      (27/Dic/12)
  3. // y cómo acceder a las columnas (sin usar SubItems)
  4. //
  5. // ©Guillermo 'guille' Som, 2012
  6. //
  7. // En mi sitio tengo publicado el artículo con las explicaciones:
  8. // http://www.elguille.info/NET/WinFX/ejemplos/wpf_listview_subitems.aspx
  9. //-----------------------------------------------------------------------------
  10.  
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using System.Windows;
  17. using System.Windows.Controls;
  18. using System.Windows.Data;
  19. using System.Windows.Documents;
  20. using System.Windows.Input;
  21. using System.Windows.Media;
  22. using System.Windows.Media.Imaging;
  23. using System.Windows.Navigation;
  24. using System.Windows.Shapes;
  25.  
  26. namespace WpfListView_cs
  27. {
  28.     /// <summary>
  29.     /// Interaction logic for MainWindow.xaml
  30.     /// </summary>
  31.     public partial class MainWindow : Window
  32.     {
  33.         public MainWindow()
  34.         {
  35.             InitializeComponent();
  36.         }
  37.  
  38.         private void Button_Click_1(object sender, RoutedEventArgs e)
  39.         {
  40.             // Rellenar el listview con datos
  41.             lvDatos.Items.Clear();
  42.             for (var i = 1; i <= 10; i++)
  43.             {
  44.  
  45.                 //' Esto añadirá el mismo texto a todas las columnas
  46.                 //' siempre y cuando no hayamos usado ningún Binding
  47.                 //' si no, esto no añade nada de nada...
  48.                 //.Items.Add("Item número " + i.ToString("00"));
  49.  
  50.  
  51.                 if ((bool)chkAnonimo.IsChecked)
  52.                 {
  53.                     // Asignamos un tipo anónimo
  54.                     // Si las columnas (GridViewColumn) tienen un Binding a las propiedades
  55.                     // los valores se asignarán a cada columna, si no están enlazadas
  56.                     // se agregará el valor de ToString a cada columna (estará el texto repetido)
  57.                     lvDatos.Items.Add(new
  58.                     {
  59.                         Nombre = "Nombre anónimo" + i.ToString(),
  60.                         email = "correo" + i.ToString() + "@outlook.com",
  61.                         Edad = 17 + i
  62.                     });
  63.  
  64.                 }
  65.                 else
  66.                 {
  67.                     // Asignamos un valor de un tipo definido (Colega)
  68.                     // que tiene como mínimo las propiedades que vamos a usar
  69.                     // en el listiView
  70.  
  71.                     lvDatos.Items.Add(new Colega
  72.                     {
  73.                         Nombre = "Nombre " + i.ToString(),
  74.                         email = "email" + i.ToString() + "@outlook.com",
  75.                         Edad = 17 + i
  76.                     });
  77.                 }
  78.             }
  79.  
  80.         }
  81.  
  82.         private void btnMostrar_Click(object sender, RoutedEventArgs e)
  83.         {
  84.             // Mostar en el TextBlock el elemento seleccionado
  85.  
  86.             // Dependiendo de que sea el tipo anónimo o el definido
  87.             // el valor mostrado será diferente.
  88.             // En el caso de la clase Colega, si no tenemos sobrecargado el método ToString
  89.             // mostrará el nombre de la clase: WpfListView_vb.Colega
  90.             txtMostar2.Text = lvDatos.SelectedItem.ToString();
  91.  
  92.             if ((bool)chkAnonimo.IsChecked)
  93.             {
  94.                 // En C# debemos definir la variable como dynamic:
  95.                 dynamic v = lvDatos.SelectedItem;
  96.  
  97.                 txtMostar.Text = v.Nombre + " (" + v.email + ")";
  98.  
  99.                 // El problema es que queramos acceder a una propiedad que no exista
  100.                 // (esto dará error)
  101.                 //txtMostar.Text = v.Nombre + " (" + v.cagonto + ")";
  102.  
  103.             }
  104.             else
  105.             {
  106.                
  107.                 var v = ((Colega)lvDatos.SelectedItem);
  108.  
  109.                 txtMostar.Text = v.Nombre + " (" + v.email + ")";
  110.  
  111.                 // como ahora usamos un tipo previamente definido
  112.                 // si usamos esto:
  113.                 //   txtMostar.Text = v.Nombre + " (" + v.cagonto + ")";
  114.                 // nos dirá que "cagonto" no es un miembro de Colega
  115.  
  116.             }
  117.         }
  118.  
  119.         private void lvDatos_SelectionChanged(object sender, SelectionChangedEventArgs e)
  120.         {
  121.             // habilitar según haya o no elementos seleccionados
  122.             btnMostrar.IsEnabled = (lvDatos.SelectedItems.Count > 0);
  123.         }        
  124.  
  125.     }
  126.  
  127.     /// <summary>
  128.     /// Tipo Colega, con las popiedades (o campos)
  129.     /// que tendrán las columnas del ListView.
  130.     /// Aunque puede tener más propiedades
  131.     /// aunque no estén enlazadas con las columnas
  132.     /// </summary>
  133.     class Colega
  134.     {
  135.         public string Nombre { get; set; }
  136.         public string email { get; set; }
  137.         public int Edad { get; set; }
  138.  
  139.         // Podemos tener más propiedadas
  140.         public string Apellidos { get; set; }
  141.     }
  142. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement