如何将特定值传递给转换器参数?

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.FemalePerson.GenderType.Malenull

【问题讨论】:

【参考方案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"/>

用于您的单选按钮。

【讨论】:

出于几个原因,我不会将枚举投射到三叉戟 - 它掩盖了枚举的预期含义,它使代码的可读性降低(即“男性”是真还是假?为什么?)并且它限制了枚举的扩展可能性(或在将来扩展枚举时引入问题)。

以上是关于如何将特定值传递给转换器参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何给SQLSERVER存储过程传递数组参数

如何将流大小转换为其他或如何将流大小值传递给向量?

如何在角度 2 中将输入值转换为大写(传递给 ngControl 的值)

如何将 Struts 2 动作类中的 InputStream 值传递给 JSP 页面中的 Ajax 并将该值转换为 JSON 数组

如何将日期值传递给 plsql 中的游标?

将 SqlDataReader 传递给函数作为转换参数