【问题标题】:Combobox Binding MVVM WPF SelectedValue组合框绑定 MVVM WPF SelectedValue
【发布时间】:2015-07-11 03:42:44
【问题描述】:

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

ConvertBack 无法转换值“ClientRatesWPF.Model.ChargeUnit” (类型“ChargeUnit”)。 BindingExpression:Path=SelectedChargeUnitListValueId; DataItem='ClientRatesViewModel' (HashCode=33434731);目标元素是 '组合框'(名称='cmbChargeUnit');目标属性是“SelectedValue” (类型'对象')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"/>

虚拟机:

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()
    });
}

【问题讨论】:

    标签: c# wpf mvvm combobox


    【解决方案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}"
    

    【讨论】:

      猜你喜欢
      • 2021-10-11
      • 1970-01-01
      • 2015-09-15
      • 1970-01-01
      • 2015-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-20
      相关资源
      最近更新 更多