在组合框中使用转换器绑定项目

时间:2012-02-25 22:57:32

标签: c# wpf xaml converter

我有一个组合框,它绑定到像这样的数据表列:

ComboBox.DataContext = DataDataTable;                
ComboBox.DisplayMemberPath = DataDataTable.Columns["IDNr"].ToString();

列中的IDNr始终以4个字母开头,后跟ID号(例如BLXF1234)。 我需要在没有字母的情况下在Combobox中显示项目(我需要在组合框中显示1234)。

所以我写了一个转换器:

class IDPrefixValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (value != null)
        {
            string s = value.ToString();
            if (s.Contains("BL"))
            {
                return s.Substring(4);
            }
            else
            {
                return s;
            }
        }
        return "";
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotSupportedException();
    }       

不,我怎么能告诉组合框使用转换器来显示项目? 我在Xaml中试过这个:

ItemsSource="{Binding}" 
DisplayMemberPath="{Binding Converter={StaticResource IDPrefixValueConverter}}"

但仍然没有工作......任何想法? 感谢

1 个答案:

答案 0 :(得分:57)

您可以修改ItemTemplate的{​​{1}}并使用您的转换器:

ComboBox

每个项目都绑定到<ComboBox ItemsSource="{Binding}"> <ComboBox.ItemTemplate> <DataTemplate> <TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/> </DataTemplate> </ComboBox.ItemTemplate> </ComboBox> 中的项目。通过在绑定中使用转换器,您可以执行所需的转换。