2016-06-15 12 views
2

Unter Bezugnahme auf meine anderen question:DataGridComboBoxColumn Converter Bindung nicht wie erwartet funktioniert

Ich habe diese DataGridComboBoxColumn:

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

Ich habe diese IValueConverter für die Laufzeitfehler ausgelöst, wenn versucht, den Wert der speichern Reihe.

[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; 
    } 
} 

aber wenn in ihm das Debuggen der Methode Konvertieren hat IEnumerable Objekte in Wert und kein string und ein SimpleComboBoxItem<>

Die SimpleComboBoxItem Klasse es wirklich einfach und die ComboBox in der Spalte zeigt die richtigen Werte:

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

Was mache ich falsch?

+1

'Data.Masters' ist ein IEnumerable und wird an das Argument' value' übergeben. Also, was erwartest du? – Clemens

+0

Sie haben Recht, ich habe den Konverter an der falschen Stelle gesetzt, in der SelectedItemBinding funktioniert wie erwartet? –

Antwort

1

Das Problem ist in der XAML, Sie ordnen eine ID als ein Element. Sie müssen die SelectedValueBinding anstelle von SelectedItemBinding verwenden.

Verwandte Themen