Итерация List <> с помощью вспомогательной переменной и последующее использование ее в ComboBox C # MVVM - PullRequest
0 голосов
/ 05 декабря 2018

Итак, я перебираю List <> внутри List.первые четыре цикла foreach в порядке, они работают.

var Paths = PathFragment.GetPathsSets(d) - вот где я получаю список в списке.Пути для отладки имеют 2 элемента, каждый из которых имеет listOfCables, Count = 6 и Count = 4 соответственно.Далее: listOfCables имеет Cables (очевидно), который является классом со свойством capacitiveCurrent_Length.Когда цикл попадает в каждое значение, он добавляет его к свойству ShowProductSum в ViewModel.Логика, стоящая за этим:

        foreach (var a in modelGPZ.listOfTrans) 
         foreach (var b in a.listOfSection) 
            foreach (var c in b.listOfLineWy) 
               if (c != null) 
                 {
                  foreach (var d in c.PathsList) 
                     {
                       var Paths = PathFragment.GetPathsSet(d);
                       for (int i = 0; i < Paths.Count; i++)
                       {
                        var licznik = Paths[i].listOfCables.Count;
                           for (int j = 0; j < licznik; j++)
                           {
                            ShowProductSum +=Paths[i].listOfCables[j]
                                            .capacitiveCurrent_Length;
                            }
                       }
                    }
                 }

Работает так, как я хотел, но что-то не так ... может быть, более кратким? Что я могу сделать, чтобы это выглядело лучше или быстрее?


Так как у меня есть свойство ShowProductSum:

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

, и это:

        protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

Я пытаюсь связать ShowProductSum и capacitiveCurrent свойство, которое находится в другом классе.

Моя наблюдаемая коллекция:

    private ObservableCollection<double> _comboBoxCapacitiveCurrent = new ObservableCollection<double>();
    public ObservableCollection<double> ComboBoxCapacitiveCurrent
    {
        get
        {
            _comboBoxCapacitiveCurrent.Clear();
            _comboBoxCapacitiveCurrent.Add(lineWy.capacitiveCurrent); // this is the first property to bind
            _comboBoxCapacitiveCurrent.Add(ShowProductSum);           // and the second property
            return _comboBoxCapacitiveCurrent;
        }
        set
        {

            OnPropertyChanged("ComboBoxPradPojemnosciowy");
        }
    }
    public double SelectedItem { get; set; }

ComboBox:

<DataGridTemplateColumn Header="CAPACITIVE CURRENT [A]" >
                                        <DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate>

                                                <ComboBox 
                                                    ItemsSource="{Binding Path=ComboBoxCapacitiveCurrent}" DisplayMemberPath="nazwa"
                                                    SelectedItem="{Binding Path=SelectedItem, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
                                                </ComboBox>
                                            </DataTemplate>
                                        </DataGridTemplateColumn.CellTemplate>

Свойства не отображаются в представлении, что я должен сделать, чтобы они отображались? Я хочу предоставить больше кода и развеять все сомнения.

...