Use converter on bound items in combobox

30,116

You can modify the ItemTemplate of the ComboBox and use your converter:

<ComboBox ItemsSource="{Binding}">
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <TextBlock Text="{Binding Converter={StaticResource IDPrefixValueConverter}}"/>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

Each item is bound to the items in the ItemsSource. By using the converter in the binding you are able to perform the conversion you want.

Share:
30,116
lebhero
Author by

lebhero

Updated on August 07, 2020

Comments

  • lebhero
    lebhero almost 4 years

    i have a combobox which is bound to a datatable column like this:

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

    The IDNr in the Column always starts with 4 letters followed with the ID Number (ex. BLXF1234) . I need to display the items in Combobox without the Letters (i need 1234 to be displayed in the combobox).

    So i wrote a converter :

    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();
        }       
    

    No, how can i tell the combobox to use the converter to display the items ? i tried this in the Xaml:

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

    But still not working ...any ideas ? Thanks

  • lebhero
    lebhero about 12 years
    Thank you, problem was binding the combobox in the code behind ...but this solved my problem..
  • tabina
    tabina over 10 years
    Does this really apply the converter to any of the items in the list? I tried the code but it seems as if the converter is only used for the selected item.
  • Martin Liversage
    Martin Liversage over 10 years
    @tabina: It works with a simple ComboBox like the one in my sample. Perhaps you have a more complex ComboBox? Here is answer to a question that seems to be the opposite of your problem: stackoverflow.com/a/8247049/98607