Bor*_*ris 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;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,我创建了将呈现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>
Run Code Online (Sandbox Code Playgroud)
当然???代码中的s不起作用:)问题是我想创建一个genderConverter转换器,它将比较给定值,即与参数中提供personObject.Gender的给定Person.GenderType值相比较,true如果值匹配则返回.
我不知道如何使转换器参数通过Person.GenderType.Female,Person.GenderType.Male并且分别null对于第一,第二和第三单选按钮.
Pav*_*kov 77
尝试使用x:Static标记扩展:
<RadioButton
Content="Female"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter={x:Static model:GenderType.Female}}"/>
Run Code Online (Sandbox Code Playgroud)
或者,您可以只传递一个字符串并用于Enum.Parse将该字符串转换为转换器中的枚举类型:
<RadioButton
Content="Female"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=Female}"/>
Run Code Online (Sandbox Code Playgroud)
-
GenderType gender = (GenderType)Enum.Parse(typeof(GenderType), parameter.ToString());
Run Code Online (Sandbox Code Playgroud)
既然你正在创建自己的转换器,为什么不直接发送一个可空的bool作为转换器参数?
所以male,female,not specified发送true,false,null.
如果您不想这样做,则必须在开头引用您的命名空间,如下所示:
xmlns:myNamespace="clr-namespace:MyNamespace"
Run Code Online (Sandbox Code Playgroud)
然后
<RadioButton
Content="Male"
IsChecked="{Binding Path=Gender,
Converter={StaticResource genderConverter},
ConverterParameter=x:Static myNamespace:Person.GenderType.Male}"/>
Run Code Online (Sandbox Code Playgroud)
为您的radiobuttons.