2011-04-18 24 views
38

He creado una clase Persona que tiene este aspecto:¿Cómo pasar un valor específico al parámetro del convertidor?

public class Person 
{ 
    public enum GenderType 
    { 
     Female, 
     Male 
    } 

    public string Name 
    { 
     get; set; 
    } 

    public GenderType? Gender 
    { 
     get; set; 
    } 
} 

A continuación, he creado la plantilla de datos que se va a presentar objetos de tipo Person.
Aquí está el código XAML:

<DataTemplate 
    x:Key="personTemplate" 
    DataType="{x:Type model:Person}"> 
    <StackPanel> 
    <RadioButton 
     Content="Female" 
     IsChecked="{Binding Path=Gender, 
        Converter={StaticResource genderConverter}, 
        ConverterParameter=???}"/> 
    <RadioButton 
     Content="Male" 
     IsChecked="{Binding Path=Gender, 
        Converter={StaticResource genderConverter}, 
        ConverterParameter=???}"/> 
    <RadioButton 
     Content="Not specified" 
     IsChecked="{Binding Path=Gender, 
        Converter={StaticResource genderConverter}, 
        ConverterParameter=???}"/> 
    </StackPanel> 
</DataTemplate> 

Por supuesto, los ??? s en el código no funcionará :) El problema es que quiero crear un convertidor genderConverter que comparará el valor dado, es decir personObject.Gender, en contra de la dado el valor Person.GenderType proporcionado en el parámetro y devolver true si los valores coinciden.

No sé cómo hacer que el parámetro del convertidor pase Person.GenderType.Female, Person.GenderType.Male y null, para el primer, segundo y tercer botón de opción, respectivamente.

Respuesta

64

Intente utilizar la extensión x:Static marcado:

<RadioButton 
     Content="Female" 
     IsChecked="{Binding Path=Gender, 
        Converter={StaticResource genderConverter}, 
        ConverterParameter={x:Static model:GenderType.Female}}"/> 

O, usted podría pasar una cadena y usar Enum.Parse para convertir esa cadena en el tipo de enumeración en el convertidor:

<RadioButton 
     Content="Female" 
     IsChecked="{Binding Path=Gender, 
        Converter={StaticResource genderConverter}, 
        ConverterParameter=Female}"/> 

-

GenderType gender = (GenderType)Enum.Parse(typeof(GenderType), parameter.ToString()); 
6

Como está creando su propio convertidor, ¿por qué no solo enviar un bool nullable como el parámetro del convertidor?

así que para male,female,not specified envíe true,false,null.

Si no quiere hacer que usted tendrá que hacer referencia a su espacio de nombres en el comienzo de esta manera:

xmlns:myNamespace="clr-namespace:MyNamespace" 

y luego

<RadioButton 
    Content="Male" 
    IsChecked="{Binding Path=Gender, 
       Converter={StaticResource genderConverter}, 
       ConverterParameter=x:Static myNamespace:Person.GenderType.Male}"/> 

para sus botones de radio.

Cuestiones relacionadas