Подтвердить что ты не робот

Как передать конкретное значение параметру преобразователя?

Я создал класс Person, который выглядит следующим образом:

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

    public string Name
    {
        get; set;
    }

    public GenderType? Gender
    {
        get; set;
    }
}

Затем я создал шаблон данных, который будет представлять объекты типа Person.
Здесь код 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>

Конечно, ??? в коде не будет работать:) Проблема в том, что я хочу создать преобразователь genderConverter, который будет сравнивать данное значение, т.е. personObject.Gender, против данного значения Person.GenderType заданный в параметре и возвращающий true, если значения совпадают.

Я не знаю, как сделать параметр преобразователя pass Person.GenderType.Female, Person.GenderType.Male и null для первого, второго и третьего переключателей соответственно.

4b9b3361

Ответ 1

Попробуйте использовать расширение разметки x:Static:

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

ИЛИ, вы можете просто передать строку и использовать Enum.Parse для преобразования этой строки в тип перечисления в конвертере:

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

-

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

Ответ 2

Поскольку вы создаете свой собственный конвертер, почему бы вам просто не отправить nullable bool в качестве параметра преобразователя?

поэтому для male,female,not specified отправьте true,false,null.

Если вы не хотите этого делать, вам нужно будет ссылаться на свое пространство имен в начале следующим образом:

xmlns:myNamespace="clr-namespace:MyNamespace"

а затем

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

для ваших радиоблок.