Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //-----------------------------------------------------------------------------
- // Ejemplo de ListView usando WPF para Desktop (27/Dic/12)
- // y cómo acceder a las columnas (sin usar SubItems)
- //
- // ©Guillermo 'guille' Som, 2012
- //
- // En mi sitio tengo publicado el artículo con las explicaciones:
- // http://www.elguille.info/NET/WinFX/ejemplos/wpf_listview_subitems.aspx
- //-----------------------------------------------------------------------------
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Windows;
- using System.Windows.Controls;
- using System.Windows.Data;
- using System.Windows.Documents;
- using System.Windows.Input;
- using System.Windows.Media;
- using System.Windows.Media.Imaging;
- using System.Windows.Navigation;
- using System.Windows.Shapes;
- namespace WpfListView_cs
- {
- /// <summary>
- /// Interaction logic for MainWindow.xaml
- /// </summary>
- public partial class MainWindow : Window
- {
- public MainWindow()
- {
- InitializeComponent();
- }
- private void Button_Click_1(object sender, RoutedEventArgs e)
- {
- // Rellenar el listview con datos
- lvDatos.Items.Clear();
- for (var i = 1; i <= 10; i++)
- {
- //' Esto añadirá el mismo texto a todas las columnas
- //' siempre y cuando no hayamos usado ningún Binding
- //' si no, esto no añade nada de nada...
- //.Items.Add("Item número " + i.ToString("00"));
- if ((bool)chkAnonimo.IsChecked)
- {
- // Asignamos un tipo anónimo
- // Si las columnas (GridViewColumn) tienen un Binding a las propiedades
- // los valores se asignarán a cada columna, si no están enlazadas
- // se agregará el valor de ToString a cada columna (estará el texto repetido)
- lvDatos.Items.Add(new
- {
- Nombre = "Nombre anónimo" + i.ToString(),
- email = "correo" + i.ToString() + "@outlook.com",
- Edad = 17 + i
- });
- }
- else
- {
- // Asignamos un valor de un tipo definido (Colega)
- // que tiene como mínimo las propiedades que vamos a usar
- // en el listiView
- lvDatos.Items.Add(new Colega
- {
- Nombre = "Nombre " + i.ToString(),
- email = "email" + i.ToString() + "@outlook.com",
- Edad = 17 + i
- });
- }
- }
- }
- private void btnMostrar_Click(object sender, RoutedEventArgs e)
- {
- // Mostar en el TextBlock el elemento seleccionado
- // Dependiendo de que sea el tipo anónimo o el definido
- // el valor mostrado será diferente.
- // En el caso de la clase Colega, si no tenemos sobrecargado el método ToString
- // mostrará el nombre de la clase: WpfListView_vb.Colega
- txtMostar2.Text = lvDatos.SelectedItem.ToString();
- if ((bool)chkAnonimo.IsChecked)
- {
- // En C# debemos definir la variable como dynamic:
- dynamic v = lvDatos.SelectedItem;
- txtMostar.Text = v.Nombre + " (" + v.email + ")";
- // El problema es que queramos acceder a una propiedad que no exista
- // (esto dará error)
- //txtMostar.Text = v.Nombre + " (" + v.cagonto + ")";
- }
- else
- {
- var v = ((Colega)lvDatos.SelectedItem);
- txtMostar.Text = v.Nombre + " (" + v.email + ")";
- // como ahora usamos un tipo previamente definido
- // si usamos esto:
- // txtMostar.Text = v.Nombre + " (" + v.cagonto + ")";
- // nos dirá que "cagonto" no es un miembro de Colega
- }
- }
- private void lvDatos_SelectionChanged(object sender, SelectionChangedEventArgs e)
- {
- // habilitar según haya o no elementos seleccionados
- btnMostrar.IsEnabled = (lvDatos.SelectedItems.Count > 0);
- }
- }
- /// <summary>
- /// Tipo Colega, con las popiedades (o campos)
- /// que tendrán las columnas del ListView.
- /// Aunque puede tener más propiedades
- /// aunque no estén enlazadas con las columnas
- /// </summary>
- class Colega
- {
- public string Nombre { get; set; }
- public string email { get; set; }
- public int Edad { get; set; }
- // Podemos tener más propiedadas
- public string Apellidos { get; set; }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement