组合框绑定 MVVM WPF SelectedValue

Combobox Binding MVVM WPF SelectedValue

获取组合框的选定值时出现问题。我得到的错误是,我似乎无法修复它,尝试了绑定、selectedvaluepath 等的各种组合,希望有人能指出我正确的方向,谢谢!

ConvertBack cannot convert value 'ClientRatesWPF.Model.ChargeUnit' (type 'ChargeUnit'). BindingExpression:Path=SelectedChargeUnitListValueId; DataItem='ClientRatesViewModel' (HashCode=33434731); target element is 'ComboBox' (Name='cmbChargeUnit'); target property is 'SelectedValue' (type 'Object') NotSupportedException:'System.NotSupportedException: Int32Converter cannot convert from 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"/>

虚拟机:

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 集合(从方法中提取的代码)

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

所以您有一个组合框,其中填充了 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}"