Использовать конвертер для связанных элементов в поле со списком

у меня есть поле со списком, которое привязано к столбцу данных, например:

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

IDNr в столбце всегда начинается с 4 букв, за которыми следует идентификационный номер (например, BLXF1234). Мне нужно отобразить элементы в поле со списком без букв (мне нужно, чтобы в поле со списком отображалось 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}}"

Но все еще не работает ... есть идеи? Спасибо


person lebhero    schedule 25.02.2012    source источник
comment
ммм... до сих пор не знаю, где ошибка...   -  person lebhero    schedule 26.02.2012
comment
DisplayMemberPath – это путь к свойству для отображения даже не привязки. Если вы примените конвертер там, вы ничего не добьетесь.   -  person H.B.    schedule 26.02.2012
comment
хорошо, в любом случае спасибо, я проверяю, что должно форматировать элементы списка !!!?   -  person lebhero    schedule 26.02.2012
comment
хорошо, есть шанс помочь в этом ??   -  person lebhero    schedule 26.02.2012


Ответы (1)


Вы можете изменить ItemTemplate из ComboBox и использовать конвертер:

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

Каждый элемент привязан к элементам в ItemsSource. Используя конвертер в привязке, вы можете выполнить желаемое преобразование.

person Martin Liversage    schedule 26.02.2012
comment
Спасибо, проблема заключалась в привязке поля со списком в коде... но это решило мою проблему.. - person lebhero; 26.02.2012
comment
Действительно ли это относится к конвертеру к любому из элементов в списке? Я попробовал код, но кажется, что конвертер используется только для выбранного элемента. - person tabina; 15.10.2013
comment
@tabina: это работает с простым ComboBox, как в моем образце. Возможно, у вас есть более сложный ComboBox? Вот ответ на вопрос, который кажется противоположным вашей проблеме: stackoverflow.com/a/8247049/98607 - person Martin Liversage; 15.10.2013