Как передать конкретное значение параметру преобразователя?
Я создал класс 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
для первого, второго и третьего переключателей соответственно.
Ответы
Ответ 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}"/>
для ваших радиоблок.