首页 > 解决方案 > ComboBox 绑定来自 MVVM C#​​ 中两个不同类的两个不同属性

问题描述

我不得不重写我的问题。下面的黑引号部分是编辑前的这篇文章。

我有两个属性:capacitiveCurrentShowProductSum。在我的 MVVM 应用程序发生任何更改之前,我曾经绑定capacitiveCurrent一个在构造函数中设置的值——它总是 15。

capacitiveCurrent放在不同的类LineOut中,代码:

电容电流属性

    private double _capacitiveCurrent;
    public double CapacitiveCurrent
    {
        get { return _capacitiveCurrent; }
        set
        {
            if (_capacitiveCurrent != value)
            {
                _capacitiveCurrent = value;
                OnPropertyChanged("_capacitiveCurrent");
            }
        }
    }

第二个属性放在MainWindow.xaml.cs代码中:

ShowProductSum

        public double _showProductSum;
    public double ShowProductSum
    {
        get { return _showProductSum; }
        set
        {
            if (_showProductSum != value)
            {
                _showProductSum = value;
                OnPropertyChanged("ProductSum");
            }
        }
    }

设置和获取的逻辑ShowProductSum已经完成......几乎。但是我对这两个属性的期望是我希望它们出现在 ComboBox 中。这就是我所拥有的:

    private ObservableCollection<double> _comboBoxCapacitiveCurrent = new ObservableCollection<double>();
    public ObservableCollection<double> ComboBoxCapacitiveCurrent
    {
        get
        {
            _comboBoxCapacitiveCurrent.Clear();
            _comboBoxCapacitiveCurrent.Add(lineWy.capacitiveCurrent);
            _comboBoxCapacitiveCurrent.Add(ShowProductSum);
            return _comboBoxCapacitiveCurrent;
        }
        set
        {
            if (_comboBoxCapacitiveCurrent != value)
            {
                _comboBoxPradPojemnosciowy = value;
                OnPropertyChanged("ComboBoxCapacitiveCurrent");
            }
        }
    }
    public double SelectedItem { get; set; }

组合框

      <DataGridTemplateColumn Header="Capacitive Current " HeaderStyle="{StaticResource ZwarcioweHeaderStyle}">
      <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
         <ComboBox 
                  ItemsSource="{Binding Path=ComboBoxCapacitiveCurrent}"
                  SelectedValue="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
          >
                  </ComboBox>
         </DataTemplate></DataGridTemplateColumn.CellTemplate></DataGridTemplateColumn>

组合框存在,但组合框的下拉列表中没有任何内容。此组合框下方的一些空白区域。一切都实现了 INotifyPropertyChanged 接口。

提前致谢。

我是 MVVM C#​​ 的绝对初学者。我正在尝试绑定位于两个不同类中的两个属性。

第一个属性public double capacitiveCurrent { get; set; }来自一个类,在此之前我使用这个属性通过普通绑定查看它 - 显示了初始化值。

 public double productLengthShortCircuitCurrent
    {
    get { return length* capacitiveShortCircuitCurrentwithGround; }
    set { }
    } is a combination of the two `length` and `capacitiveShortCircuitCurrentwithGround` both with getters and

二传手。

ComboBox 放在里面

`<DataGridTemplateColumn Header"ABC">
  <DataGridTemplateColumn.CellTemplate
   <DataTemplate>
    <ComboBox .../>`

我要做的是在 ComboBox 中列出这两个属性,并且:

  1. 我需要 capacitiveCurrent可以从视图中编辑,
  1. productLengthShortCircuitCurrent应该是所有设定值的总和(所以是总和产品)。我应该调用一个函数来执行此操作,然后将其绑定到 ComboBox 吗?

**我已经设置和获取此属性并实现了获取ProductSum下面的属性。这完全是关于在 ComboBox 中显示这两个属性。

我真的很困惑。找了两天的答案,没有想到。也许我的知识很浅,但是......试图将这两个属性绑定到一个接口,比如一个带有 getter 和 setterpublic IConnectedProperties Categories的私有列表。_category

标签: c#wpfmvvmcomboboxproperties

解决方案


在您的设置器中修复此问题:

_comboBoxPradPojemnosciowy = value; // binding will loose the instance

使用“清除()”和“添加()”。当您更改实例时 - 绑定仍在旧实例中查找。

_comboBoxPradPojemnosciowy.Clear();
foreach (var item in value)
{
    _comboBoxPradPojemnosciowy.Add(item);
}

OnPropertyChanged("ComboBoxCapacitiveCurrent");

如果 ShowProductSum 部分正常工作,也许这是您唯一需要解决的问题。

组合框绑定:

ItemsSource="{Binding Path=ComboItems}"   
SelectedItem="{Binding Path=SelectedItem}"

Carete 属性和字段:

private ObservableCollection<double> comboItems = new ObservableCollection<double>();
public ObservableCollection<double> ComboItems{
    get
    {
        this.comboItems.Clear();
        this.comboItems.Add(prad_pojemnosciowy);
        this.comboItems.Add(iloczyn_dlugosc_pojemnościowy_prąd_zwarcia_z_ziemią);
        return this.comboItems;
    } 
    set;
}
public double SelectedItem{get;set}

请记住在两个属性的设置器中通知“ComboItems”的属性已更改。


推荐阅读