Использовать конвертер для связанных предметов в выпадающем списке - PullRequest
26 голосов
/ 26 февраля 2012

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

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

IDNr в столбце всегда начинается с 4 букв, за которыми следует идентификационный номер (например, 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 Ответ

58 голосов
/ 26 февраля 2012

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

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

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

...