使用 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
。单个枚举值的字符串表示始终与该值的字段名称相匹配(或者,在多个枚举元素具有相同值的情况下,它将与 等效 值的字段名称相匹配).
我有一个枚举描述转换器
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
。单个枚举值的字符串表示始终与该值的字段名称相匹配(或者,在多个枚举元素具有相同值的情况下,它将与 等效 值的字段名称相匹配).