我在列表视图中有一个单选按钮组。此列表视图的行(其中包含单选按钮 grp 等)是一个可观察的集合。
我写的代码是这样的:
Xaml:
<RadioButton Content="EnumValueName1"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName1}" >
</RadioButton>
<RadioButton Content="EnumValueName2"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName2}">
</RadioButton>
<RadioButton Content="EnumValueName3"
GroupName="RadButGrp1"
IsChecked="{Binding propertyName,Mode=TwoWay,Converter={StaticResource EnumToBoolConverter},ConverterParameter=EnumValueName3}">
</RadioButton>
我正在尝试直接绑定到我的数据结构中名为 propertyName 的数据字段,该数据结构定义了包含这些值的表。对于这个视图,我的 ViewModel 类中没有这个字段。我这样做是为了避免跟踪我当前正在填充的集合的索引。(或者我想这么想!)
转换器:
public class EnumBooleanConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null)
return DependencyProperty.UnsetValue;
if (value == null || Enum.IsDefined(value.GetType(), value) == false)
return DependencyProperty.UnsetValue;
object parameterValue = Enum.Parse(value.GetType(), parameterString);
return parameterValue.Equals(value);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
string parameterString = parameter as string;
if (parameterString == null || value.Equals(false))
return DependencyProperty.UnsetValue;
return Enum.Parse(targetType, parameterString);
}
}
问题是在 Enum.Parse 行的 ConvertBack 函数中,出现以下 Argument 异常:
提供的类型必须是枚举。参数名称:枚举类型
有没有办法将枚举类型返回到绑定?如何告诉单选按钮它代表哪个枚举值?如何编写一个将适当的枚举值返回给绑定的函数?
希望各位大神帮忙。提前致谢!