使用 converterparamter 将当前组合框项目传递给 Converter

Passing current combobox item to Converter using converterparamter

我有一个枚举描述转换器

public class EnumDescriptionConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        //// parameter need current item, but null or "Value"
        if (Enum.IsDefined(value.GetType(), value) == false)
            return System.Windows.DependencyProperty.UnsetValue;

        string parameterString = Enum.GetName(value.GetType(), value);  
        if (parameterString == null)
            return System.Windows.DependencyProperty.UnsetValue;

        var desc = (value.GetType().GetField(parameterString).GetCustomAttributes(typeof(DescriptionAttribute), false).FirstOrDefault() as DescriptionAttribute);
        if (desc != null)
            return desc.Description;
        else
            return parameter.ToString();
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我喜欢将当前组合框项目作为 ConverterParameter 传递给转换器

<ComboBox Name="test" Grid.Column="1" Grid.Row="2" VerticalAlignment="Center" IsReadOnly="True" >
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Converter={StaticResource enumDescriptionConverter},ConverterParameter=Value}"/>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>

但当我尝试绑定时出现错误,值以字符串形式出现 "Value"。有什么方法可以传递当前项目吗?

您不需要转换器参数。只需替换:

value.GetType().GetField(parameterString)

value.GetType().GetField(value.ToString())

您可以完全摆脱 parameterString。单个枚举值的字符串表示始终与该值的字段名称相匹配(或者,在多个枚举元素具有相同值的情况下,它将与 等效 值的字段名称相匹配).