How to pass specific value to the converter parameter?

陌路散爱 提交于 2019-11-28 23:34:50

问题


I have created a class Person that looks like this:

public class Person
{
    public enum GenderType
    {
        Female, 
        Male
    }

    public string Name
    {
        get; set;
    }

    public GenderType? Gender
    {
        get; set;
    }
}

Next, I created data template that is going to present objects of type Person.
Here's XAML code:

<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>

Of course the ???s in the code won't work :) The problem is that I want to create a genderConverter converter which will compare the given value, i.e. personObject.Gender, against the given Person.GenderType value provided in the parameter and return true if the values match.

I don't know how to make the converter parameter pass Person.GenderType.Female, Person.GenderType.Male and null, for the first, second and third radio button, respectively.


回答1:


Try using x:Static markup extension:

<RadioButton 
        Content="Female" 
        IsChecked="{Binding Path=Gender, 
                    Converter={StaticResource genderConverter}, 
                    ConverterParameter={x:Static model:GenderType.Female}}"/>

OR, you could just pass a string and use Enum.Parse to convert that string to the enum type in the converter:

<RadioButton 
        Content="Female" 
        IsChecked="{Binding Path=Gender, 
                    Converter={StaticResource genderConverter}, 
                    ConverterParameter=Female}"/>

-

GenderType gender = (GenderType)Enum.Parse(typeof(GenderType), parameter.ToString());



回答2:


Since you're creating your own converter why don't you just send a nullable bool as the converter parameter?

so for male,female,not specified send true,false,null.

If you don't want to do that you will have to reference your namespace in the beginning like this:

xmlns:myNamespace="clr-namespace:MyNamespace"

and then

<RadioButton 
    Content="Male" 
    IsChecked="{Binding Path=Gender, 
                Converter={StaticResource genderConverter}, 
                ConverterParameter=x:Static myNamespace:Person.GenderType.Male}"/>

for your radiobuttons.



来源:https://stackoverflow.com/questions/5702737/how-to-pass-specific-value-to-the-converter-parameter

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!