ComboBox绑定具有MVVM C#

时间:2018-11-28 13:15:13

标签: c# wpf mvvm combobox properties

我不得不重写我的问题。下面用黑引号括起来的部分是编辑之前的帖子。

我有两个属性:capacitiveCurrentShowProductSum。 在对MVVM应用程序进行任何更改之前,我曾经将capacitiveCurrent与构造器中设置的值绑定在一起-始终为15。

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

capacitiveCurrent属性

    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
     

设置者。

     

组合框位于

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

我想做的是在列表中列出这两个属性   ComboBox和:

     
      
  1. 我需要capacitiveCurrent才能从视图中对其进行编辑,
  2.   
     
    
        
  1. productLengthShortCircuitCurrent应该是所有设置值的总和(因此是总和)。我应该调用函数来做到这一点吗?     然后将其绑定到ComboBox?
  2.     
  
     

**我已经想过要设置并获取此属性,并已实现以下的ProductSum属性。这都是关于显示两个属性   ComboBox中的属性。

     

我真的很困惑。搜索了两天的答案,没来   想出一个主意。也许我的知识是肤浅的,但是...试图束缚   界面的两个属性,例如public IConnectedProperties Categories和私有_category列表,   获取器和设置器。

2 个答案:

答案 0 :(得分:0)

将您的类的两个实例放在一个viewmodel类中,并将其绑定到适当的值。 “ ViewModels”用于在视图和模型之间进行通信。因此,将所有用于与视图交互的逻辑放入视图模型中。然后,您必须将viewmodel绑定到视图,然后在对象上设置datacontext。如果要在实例中绑定属性,可以使用Instance.Property进行绑定

也许these会为您提供帮助。 对于基本的explanation

答案 1 :(得分:0)

在设置器中解决此问题:

_comboBoxPradPojemnosciowy = value; // binding will loose the instance

使用“ Clear()”和“ Add()”。更改实例时-绑定仍在旧实例中查找。

_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”的属性已更改   这两个属性。