2016-06-15 3 views
2

Ссылаясь на мой другой question:DataGridComboBoxColumn Переплет конвертер не работает, как ожидалось

Я это DataGridComboBoxColumn:

<DataGridComboBoxColumn Header="Master" SelectedItemBinding="{Binding MasterId}" SelectedValueBinding="{Binding Id}" DisplayMemberPath="Id" ItemsSource="{Binding Data.Masters, Converter={converters:SimpleComboItemConverter}, Source={StaticResource proxy}}" /> 

Я создал этот IValueConverter для ошибки во время выполнения возникает при попытке сохранить значение к ряд.

[ValueConversion(typeof(string), typeof(SimpleComboItem<>))] 
public class SimpleComboItemConverter : MarkupExtension, IValueConverter 
{ 
    public static SimpleComboItemConverter converter; 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     if (null == converter) 
     { 
      converter = new SimpleComboItemConverter(); 
     } 
     return converter; 
    } 
} 

но при отладке внутри него метод Convert имеет IEnumerable объекты в стоимости и не string и SimpleComboBoxItem<>

Класс SimpleComboBoxItem это действительно просто и ComboBox в колонке отображаются правильные значения:

public class SimpleComboItem<T> 
{ 
    public T Value { get; set; } 
    public string Text { get; set; } 
} 

Что я делаю неправильно?

+1

'Data.Masters' является IEnumerable и передается аргументу' value'. Итак, каково ваше ожидание? – Clemens

+0

Вы правы, я установил конвертер в неправильное место, в SelectedItemBinding будет работать так, как ожидалось? –

ответ

1

Проблема в xaml, вы сопоставляете идентификатор как элемент. Вы должны использовать SelectedValueBinding вместо SelectedItemBinding.

Смежные вопросы