如何将特定值传递给转换器参数?
Posted
技术标签:
【中文标题】如何将特定值传递给转换器参数?【英文标题】:How to pass specific value to the converter parameter? 【发布时间】:2011-08-07 20:19:27 【问题描述】:我创建了一个类 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>
当然,代码中的???
s 不起作用:) 问题是我想创建一个genderConverter
转换器,它将给定值(即personObject.Gender
)与给定的Person.GenderType
进行比较参数中提供的值,如果值匹配,则返回 true
。
我不知道如何让转换器参数分别为第一个、第二个和第三个单选按钮传递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】:既然您要创建自己的转换器,为什么不直接发送一个可为空的布尔值作为转换器参数?
所以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"/>
用于您的单选按钮。
【讨论】:
出于几个原因,我不会将枚举投射到三叉戟 - 它掩盖了枚举的预期含义,它使代码的可读性降低(即“男性”是真还是假?为什么?)并且它限制了枚举的扩展可能性(或在将来扩展枚举时引入问题)。以上是关于如何将特定值传递给转换器参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在角度 2 中将输入值转换为大写(传递给 ngControl 的值)
如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组