En este documento se muestra la forma de cargar una colección de objetos en una enumeración usando condigo xaml
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
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 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
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
<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>
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
© 1997 - - La Güeb de Joaquín | |||||
Joaquín Medina Serrano
|
|||||
|
Codificación | |
Fecha de creación | |
Última actualización | |