我创建了一个类似于此的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
。
我不知道如何使转换器参数分别为第一个,第二个和第三个单选按钮传递Person.GenderType.Female
,Person.GenderType.Male
和null
。
答案 0 :(得分:74)
尝试使用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());
答案 1 :(得分:6)
由于您正在创建自己的转换器,为什么不直接发送可空的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}"/>
用于你的无线电按钮。