Wpf – Cargar una colección en una enumeración

Descripción general

En este documento se muestra la forma de cargar una colección de objetos en una enumeración usando condigo xaml

[TOC] Tabla de Contenidos


↑↑↑

Wpf – Cargar una colección en una enumeración


↑↑↑

Documentacion MSDN

Para cargar una colección de cadenas en una enumeración puedes mirar el ejemplo que proporciona MSDM cuyo código copio a continuación.

Class VacationSpots
    Inherits ObservableCollection(Of String)
    Public Sub New()

        Add("Spain")
        Add("France")
        Add("Peru")
        Add("Mexico")
        Add("Italy")
    End Sub
End Class

↑↑↑

El Objeto personalizado

Para complicar el ejercicio vamos a cargar en el combo una colección de objetos personalizados.

Para este pequeño articulo vamos a usar un objeto que contenga, de forma predefinida, medidas de capacidad de archivos. Y para ello la clase tendrá el siguiente diseño (que evidentemente se puede mejorar). Para complicar un poco el asunto uno de sus campos es una enumeración que indica el tipo de dato que es el valor numérico (ejemplo 2 Gigas, 5 Megas). El comentario es un texto añadido que puede existir o no.

Recuerda que un combo carga en cada uno de sus Ítems un objeto y que muestra en la pantalla el valor de la función ToString, por eso una de las primeras cosas que hay que hacer es sobrescribir esa función.

La otra función ToBytes devuelve el valor en bytes de la medida que contiene las variables de la clase.


↑↑↑

Public Class TamañoPredefinido

Public Enum UnidadesCapacidadE
    KB
    MB
    GB
End Enum


Public Class TamañoPredefinido

    Public Property Cantidad As Double = 0
    Public Property Unidad As UnidadesCapacidadE = UnidadesCapacidadE.KB
    Public Property Comentario As String
   
    Public Sub New()

    End Sub

    Public Sub New(ByVal pcantidad As Double, ByVal punidad As UnidadesCapacidadE, ByVal pcomentario As String)
        Me.Cantidad = pcantidad
        Me.Unidad = punidad
        Me.Comentario = pcomentario
    End Sub

    Public Sub New(ByVal pcantidad As Double, ByVal punidad As UnidadesCapacidadE)
        Me.New(pcantidad, punidad, String.Empty)
    End Sub

    Public Overrides Function ToString() As String
        Return String.Format(System.Globalization.CultureInfo.CurrentCulture, 
                             "{0:###0.00} {1} [{2}]", 
                              Cantidad, Unidad, Comentario)
    End Function

    Public Function ToBytes() As Long
        Dim respuesta As Long = 0
        Select Case Unidad
            Case UnidadesCapacidadE.KB
                respuesta = CLng(Cantidad * 1024)
            Case UnidadesCapacidadE.MB
                respuesta = CLng(Cantidad * 1024 * 1024)
            Case UnidadesCapacidadE.GB
                respuesta = CLng(Cantidad * 1024 * 1024 * 1024)
            Case Else
                Throw New System.ComponentModel.InvalidEnumArgumentException()
        End Select
        Return respuesta
    End Function
End Class

↑↑↑

La colección de objetos personalizados

En esta clase se cargan en el constructor los valores que se cargaran en el ComboBox.

Public Class TamañosPredefinidos
    Inherits ObjectModel.ObservableCollection(Of TamañoPredefinido)

    Public Sub New()
        Dim comillas As Char = CType(Char.ConvertFromUtf32(34), Char)
        Add(New TamañoPredefinido(750, UnidadesCapacidadE.KB, "3,5" & comillas & " Floppy Disk"))
        Add(New TamañoPredefinido(1.44, UnidadesCapacidadE.MB, "3,5" & comillas & " Floppy Disk"))
        Add(New TamañoPredefinido(1457664, UnidadesCapacidadE.KB, "3,5" & comillas & " Floppy Disk"))
        Add(New TamañoPredefinido(200, UnidadesCapacidadE.MB, "Sky drive"))
        Add(New TamañoPredefinido(650, UnidadesCapacidadE.MB, "Cd - Rom"))
        Add(New TamañoPredefinido(700, UnidadesCapacidadE.MB, "Cd - Rom"))
        Add(New TamañoPredefinido(4.375, UnidadesCapacidadE.GB, "DVD - 4,5 GB "))
        Add(New TamañoPredefinido(4.5, UnidadesCapacidadE.GB, "DVD - 4,5 GB "))
    End Sub
End Class

↑↑↑

El código Xaml

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"   
    xmlns:local="clr-namespace:WpfPruebaEligeTamaño"        
  Title="MainWindow" Height="175" Width="314">


    <Window.Resources>
        <ObjectDataProvider x:Key="capacidadesData"
                    MethodName="GetValues" 
                    ObjectType="{x:Type sys:Enum}">
            <ObjectDataProvider.MethodParameters>
                <x:Type TypeName="local:UnidadesCapacidadE" />
            </ObjectDataProvider.MethodParameters>
        </ObjectDataProvider>


        <local:TamañosPredefinidos x:Key="tamañosPredefinidosClaseData" />


    </Window.Resources>



    <Grid>

        <TextBox Height="23" Width="66"
                 HorizontalAlignment="Left" VerticalAlignment="Top"
                 Margin="41,20,0,0" Name="TextBoxUnidades"   />
        
        <Label Content="Bytes" Height="28" 
               HorizontalAlignment="Left" VerticalAlignment="Top"
               Margin="29,91,0,0" Name="LabelTituloBytes"  />

        <ComboBox Height="23" HorizontalAlignment="Left" Margin="123,20,0,0" 
                  Name="ComboBox1" VerticalAlignment="Top" Width="53"   SelectedIndex="0" 
                  ItemsSource="{Binding Source={StaticResource capacidadesData}}" />

        <TextBox Height="23" Width="175"
                 HorizontalAlignment="Left" VerticalAlignment="Top"
                 Margin="97,93,0,0"
                 Name="TextBoxResultado"   />

        <ComboBox Height="23"  Width="233"
                  HorizontalAlignment="Left"  VerticalAlignment="Top"
                  Margin="29,49,0,0" Name="tamañosPredefinidos01"  
                  SelectedIndex="0" 
                  ItemsSource="{Binding Source={StaticResource tamañosPredefinidosClaseData}}" />


        <!-- Botones Aceptar / Cancelar -->
    </Grid>
</Window>

↑↑↑

El evento SelectionChanged

En el código que se muestra a continuación se ve como se itercepta el evento[SelectionChanged] y se recuperan los datos del objeto seleccionado en el ComboBox

Private Sub tamañosPredefinidos01_SelectionChanged(
            sender As System.Object, e As System.Windows.Controls.SelectionChangedEventArgs) _
        Handles tamañosPredefinidos01.SelectionChanged

    Dim objTamaño As TamañoPredefinido = CType(tamañosPredefinidos01.SelectedItem, TamañoPredefinido)
    Me.TextBoxResultado.Text = objTamaño.ToBytes.ToString

End Sub

↑↑↑

La imagen del formulario

Imagen carga una coleccion en una enumeracion

↑↑↑

A.2.Enlaces

[Para saber mas]
Wpf – Cargar en un ListBox una enumeración del sistema
Wpf – Cargar en un ListBox/ComboBox una enumeración creada por nosotros
Wpf – Cargar una colección en una enumeración (Este documento)
Wpf – Extender un control ComboBox que cargue una enumeración
Wpf – ComboBox.SelectionChanged
[Grupo de documentos]
[Documento Index]
[Documento Start]
[Imprimir el Documento]
© 1997 - - La Güeb de Joaquín
Joaquín Medina Serrano
Ésta página es española

Codificación
Fecha de creación
Última actualización
[HTML5 Desarrollado usando CSS3]