Tomar el RadioButton Marcado (WPF)

En uno de los sistemas que estoy creando me tocó usar RadioButtons, y me di cuenta que no tenía ni idea de saber el control que estaba seleccionado…

En html estaba acostumbrado a tomar el nombre y listo, o en jquery filtrarlo por el checked… pero en WPF (VB) no tenía ni idea x_X

Buscando por aquí y por allá y usando al siempre buen amigo Linq llegué a la solución🙂

Primero, tener la grilla con un nombre y todos los radiobuttons con su Grupo correspondiente. Por ejemplo:

<Grid x:Name="grid_tipo_tramite" HorizontalAlignment="Left" Height="62" VerticalAlignment="Top" Width="509">
    <RadioButton Content="Inscripción" HorizontalAlignment="Left" Margin="10,10,0,0" VerticalAlignment="Top" GroupName="tipo_tramite"/>
    <RadioButton Content="Rectificación DNI" HorizontalAlignment="Left" Margin="10,31,0,0" VerticalAlignment="Top" GroupName="tipo_tramite"/>
    <RadioButton Content="Rectificación DNI cambio Imagen" HorizontalAlignment="Left" Margin="131,10,0,0" VerticalAlignment="Top" GroupName="tipo_tramite"/>
    <RadioButton Content="Duplicado DNI" HorizontalAlignment="Left" Margin="342,10,0,0" VerticalAlignment="Top" GroupName="tipo_tramite"/>
    <RadioButton Content="Rectificación Sin Emisión de DNI" HorizontalAlignment="Left" Margin="131,31,0,0" VerticalAlignment="Top" GroupName="tipo_tramite"/>
</Grid>

Ahora la magia

Private Sub btn_guardar_click(sender As Object, e As RoutedEventArgs) Handles btn_guardar.Click
    Dim radio As RadioButton = Me.grid_tipo_tramite.Children.OfType(Of RadioButton)().FirstOrDefault(Function(rb) rb.IsChecked = True AndAlso rb.GroupName = "tipo_tramite")
        If (IsNothing(radio)) Then
            MessageBox.Show("Debe escogar un Tipo de Documento")
        Else
            MessageBox.Show(radio.Content)
        End If
    End If
End Sub

Como ven, cree un radio local y a ese le agregué las condiciones.

  1. Dentro del grid “grid_tipo_tramite”
  2. Todos los RadioButtons
  3. Que esté checkeado y que además pertenezca al grupo “tipo_tramite”

Luego comprobar que esté alguno marcado, y finalmente mostrar el content del control🙂

EDIT ! Ahora supongamos que queremos marcar el radioButton dependiendo de un valor.
En C# lo hacemos así:

var radioTramite = this.grid_tipo_tramite.Children.OfType<RadioButton>().
    FirstOrDefault(r => (string)r.Content == ficha.TipoTramite && r.GroupName == "tipo_tramite");
radioTramite.IsChecked = true; 

Donde ficha.TipoTramite es un String con el Content del radiobutton. Por eso se “castea” el Content a (string)

Espero les sirva.

Acerca de MaritoCares

Ingeniero Informático. Con tendencias a la programación en [C#, VB].NET, Java(Web principalmente...), PHP, JavaScript, algo mínimo de [ruby, python], y el clásico C.
Esta entrada fue publicada en C#, LINQ, Tips, VB. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s