.net 如何将特定值传递给转换器参数?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5702737/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to pass specific value to the converter parameter?
提问by Boris
I have created a class Person that looks like this:
我创建了一个如下所示的 Person 类:
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:
接下来,我创建了将呈现 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>
Of course the ???s in the code won't work :) The problem is that I want to create a genderConverterconverter which will compare the given value, i.e. personObject.Gender, against the given Person.GenderTypevalue provided in the parameter and return trueif the values match.
当然???代码中的s 不起作用 :) 问题是我想创建一个genderConverter转换器来比较给定值,即personObject.Gender,与Person.GenderType参数中提供的给定值进行比较,true如果值匹配则返回。
I don't know how to make the converter parameter pass Person.GenderType.Female, Person.GenderType.Maleand null, for the first, second and third radio button, respectively.
我不知道如何使转换器参数传递Person.GenderType.Female,Person.GenderType.Male并且null,对于第一,第二和第三单选按钮,分别。
回答by Pavlo Glazkov
Try using x:Staticmarkup extension:
尝试使用x:Static标记扩展:
<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.Parseto convert that string to the enum type in the converter:
或者,您可以只传递一个字符串并用于Enum.Parse将该字符串转换为转换器中的枚举类型:
<RadioButton
Content="Female"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=Female}"/>
-
——
GenderType gender = (GenderType)Enum.Parse(typeof(GenderType), parameter.ToString());
回答by Jose
Since you're creating your own converter why don't you just send a nullable bool as the converter parameter?
既然您正在创建自己的转换器,为什么不发送一个可为空的 bool 作为转换器参数?
so for male,female,not specifiedsend true,false,null.
所以对于male,female,not specified发送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.
为您的单选按钮。

