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

时间:2011-04-18 12:17:49

标签: .net wpf xaml binding converter

我创建了一个类似于此的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.FemalePerson.GenderType.Malenull

2 个答案:

答案 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}"/>

用于你的无线电按钮。