2015-05-01 8 views
1

Ошибка при получении выбранного значения Combobox. Ошибка, которую я получаю, и я не могу ее исправить, попробовал различные комбинации привязки, selectedvaluepath и т. Д., Надеюсь, кто-то может указать мне в правильном направлении, спасибо!Combobox Binding MVVM WPF SelectedValue

ConvertBack не может преобразовать значение 'ClientRatesWPF.Model.ChargeUnit' (тип 'ChargeUnit'). BindingExpression: Path = SelectedChargeUnitListValueId; DataItem = 'ClientRatesViewModel' (HashCode = 33434731); целевой элемент - 'ComboBox' (Name = 'cmbChargeUnit'); target свойство - SelectedValue (type 'Object') NotSupportedException: 'System.NotSupportedException: Int32Converter не может конвертировать из ClientRatesWPF.Model.ChargeUnit.

<av:ComboBox x:Name="cmbChargeUnit" HorizontalAlignment="Left" Margin="548,15,0,0" Width="187" ItemsSource="{av:Binding ChargeUnits}" DisplayMemberPath="ChargeUnitDescription" SelectedValue="{Binding SelectedChargeUnitListValueId}" VerticalAlignment="Top" Background="{av:DynamicResource {x:Static av:SystemColors.ControlDarkDarkBrushKey}}" Height="20" IsSynchronizedWithCurrentItem="True"/> 

VM:

public ObservableCollection<ChargeUnit> ChargeUnits 
{ 
    get { return _chargeUnitsCollection; } 
    set { _chargeUnitsCollection = value; } 
} 

public IList<ChargeUnit> ChargeUnitDescription 
{ 
    get { return _chargeUnitDescription; } 
    set 
    { 
     _chargeUnitDescription = value; 
     OnPropertyChanged("ChargeUnitDescription"); 
    } 
} 

public IList<ChargeUnit> ChargeUnitListValueId 
{ 
    get { return _chargeUnitListValueId; } 
    set 
    { 
     _chargeUnitListValueId = value; 
     OnPropertyChanged("ChargeUnitListValueId"); 
    } 
} 

public int SelectedChargeUnitListValueId 
{ 
    get { return _SelectedChargeUnitListValueId; } 
    set 
    { 
     _SelectedChargeUnitListValueId = value; 
     OnPropertyChanged("SelectedChargeUnitListValueId"); 
    } 
} 

Где я наполнение Observable Collection (код, извлеченный из метода)

while (reader.Read()) 
{ 
    _chargeUnitsCollection.Add(new ChargeUnit 
    { 
     ChargeUnitListValueId = (int)reader["ListValueId"], 
     ChargeUnitDescription = reader["ValueName"].ToString() 
    }); 
} 

ответ

1

так у вас есть поле со списком заполняется список ChargeUnit и вы пытаетесь установить SelectedValue на int, что будет вашей проблемой. Вы должны изменить к выбранному ChargeUnit

public int SelectedChargeUnitListValueId 
{ 
    get { return _SelectedChargeUnitListValueId; } 
    set 
    { 
     _SelectedChargeUnitListValueId = value; 
     var unitsWhere = ChargeUnits.Where(x => x.id == _SelectedChargeUnitListValueId); 
     if (unitsWhere.Count() > 0) 
     { 
      SelectedChargeUnit = unitsWhere.First(); 
     } 
     OnPropertyChanged("SelectedChargeUnitListValueId"); 
    } 
} 

public ChargeUnit SelectedChargeUnit 
{ 
    get { return _SelectedChargeUnit; } 
    set 
    { 
     _SelectedChargeUnit = value; 
     OnPropertyChanged("SelectedChargeUnit"); 
    } 
} 

и в вашем связывании:

SelectedValue="{Binding SelectedChargeUnit}"