Как заполнить DataGridTemplateColumn.CellTemplate ComboBox с конкретными значениями только для каждой строки сетки данных - PullRequest
0 голосов
/ 29 декабря 2018

Я разрабатываю приложение, которое имеет эту DataGrid.Каждая строка имеет свой собственный Combobox в той же колонке.Изображено под:

https://imgur.com/1Wn41dD

Как описано на рисунке, я хочу, чтобы каждый ComboBox имел свои собственные элементы, так как значение «15» для всех них, остальные значения должны быть размещены соответствующим образомв строке это соответствует.Что важно - 'SumaIlooczynowDlaComboBoxów' - это словарь с целочисленными идентификаторами, соответствующими идентификаторам строки / строки, двойное значение - это то, что заполняется в комбинированных списках (двойные значения на рисунке).Моя проблема в том, что я хочу, чтобы отображались / заполнялись только определенные элементы.Может кто-нибудь привести примеры, как мне удалось это сделать?Если я что-то упустил из своего кода, дайте мне знать в комментариях

Может быть больше строк / строк (L1, L2 и т. Д.).Больше строк означает больше элементов в комбинированных списках ... что нежелательно.

ComboBox XAML:

<DataGridTemplateColumn Header="PRĄD POJEMNOŚCIOWY [A]" HeaderStyle="{StaticResource PRAD_POJEMNOSCIOWY}">
 <DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
    <ComboBox ItemsSource="{Binding ComboBoxPradPojemnosciowy, RelativeSource={RelativeSource AncestorType=Window}}"  
              SelectedValue="{Binding SelectedItem, UpdateSourceTrigger=PropertyChanged}"
               IsEditable="True"
               Text= "{Binding Path=Prad_pojemnosciowy, UpdateSourceTrigger=PropertyChanged}"/>
  </DataTemplate>
 </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Вот как я заполняю ComboBox:

private void RefreshComboBox(object sender)
{
  ComboBoxPradPojemnosciowy.Clear();
  ComboBoxPradPojemnosciowy.Add(lineWy.Prad_pojemnosciowy);
  for (int i = 0; i < SumyIloczynowDlaComboBoxów.Count; i++)
    {
     double value = SumyIloczynowDlaComboBoxów[SumyIloczynowDlaComboBoxów.Keys.ElementAt(i)];
      ComboBoxPradPojemnosciowy.Add(value);
    }
}

Это свойства, устанавливающие все мои значения в одном месте, поэтому значения отображаются как минимум.

   private ObservableCollection<double> _comboBoxPradPojemnosciowy = new ObservableCollection<double>();
    public ObservableCollection<double> ComboBoxPradPojemnosciowy // lista elementów ComboBoxa, ktory wyswietla sumy iloczynow pradu zwarciowego i dlugosci kabla
    {
        get
        {
            return _comboBoxPradPojemnosciowy;
        }
        set
        {
            _comboBoxPradPojemnosciowy.Clear();

            foreach (var item in value)
            {
                _comboBoxPradPojemnosciowy.Add(item);
            }
            OnPropertyChanged("ComboBoxPradPojemnosciowy");
        }
    }

    private double _selectedItem;
    public double SelectedItem
    {
        get
        {
            return _selectedItem;
        }
        set
        {

            var line = (modelGPZ.GetLineWyList().FirstOrDefault(x => x.isSelected == true));
            if (line != null)
            {
                _selectedItem = value;
            }
            else
            {
                _selectedItem = lineWy.Prad_pojemnosciowy;
            }


            OnPropertyChanged("SelectedItem");
        }
    }

    private Dictionary<int, double> _sumyIloczynowDlaComboBoxów = new Dictionary<int, double>();
    public Dictionary<int, double> SumyIloczynowDlaComboBoxów
    {
        get { return _sumyIloczynowDlaComboBoxów; }
        set
        {
            if (_sumyIloczynowDlaComboBoxów != value)
            {
                _sumyIloczynowDlaComboBoxów = value;
                OnPropertyChanged("SumyIloczynowDlaComboBoxów");
                OnPropertyChanged("ComboBoxPradPojemnosciowy");

            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...