Список со списком внутри как ItemsSource - PullRequest
0 голосов
/ 05 апреля 2019

Мне нужно создать DataGrid, где ItemsSourc e - это коллекция типа списка (DataAttributeCollection), каждый объект (DataAttribute) внутри имеет attributename в виде строки и список значений в виде строки. На данный момент сетка показывает 2 заголовка, attributenam e и values, ячейки ниже attributename правильно с attributename, но значения пусты http://prntscr.com/n81tg7. У меня 2 проблемы:

  1. есть только 1 столбец значений, их должно быть столько, сколько значений внутри dataattribute объект.
  2. Как мне попасть во внутренний список и вставить значения в ячейки?
    public partial class PageMainAttribute : Page
    {
        public PageMainAttribute()
        {
            InitializeComponent();
            DataAttribute da1 = new DataAttribute("Wind");
            DataAttribute da2 = new DataAttribute("Temperature");
            da1.AddValue("Strong");
            da1.AddValue("Storm");
            da1.AddValue("None");
            da2.AddValue("Hot");
            da2.AddValue("Cold");
            DataAttributeCollection dac = new DataAttributeCollection();
            dac.Add(da1);
            dac.Add(da2);
            AttributeGrid.ItemsSource = null;
            AttributeGrid.ItemsSource = dac;

        }
    }

После исследования я нашел, как вручную генерировать столбцы и строки, но я не знаю, что печатать в Binding

            InitializeComponent();
            DataAttribute da1 = new DataAttribute("Wind");
            DataAttribute da2 = new DataAttribute("Temperature");
            da1.AddValue("Strong");
            da1.AddValue("Storm");
            da1.AddValue("None");
            da2.AddValue("Hot");
            da2.AddValue("Cold");
            DataAttributeCollection dac = new DataAttributeCollection();
            dac.Add(da1);
            dac.Add(da2);
            AttributeGrid.ItemsSource = null;
            AttributeGrid.ItemsSource = dac;
            DataGridTextColumn textColumn = new DataGridTextColumn();
            textColumn.Header = "Attribute name";
            textColumn.Binding = new Binding("I dont know what to type here");
            AttributeGrid.Columns.Add(textColumn);

// редактировать Хорошо, я решил проблему с 1 столбцом значений, но все еще не знаю, как назначить какие-либо данные ячейкам значений, или требуется привязка.

Код выглядит так:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Decision_tree.DataObjects.DataAttributes;
namespace Decision_tree.Views.Pages
{
    /// <summary>

    /// </summary>
    public partial class PageMainAttribute : Page
    {
        public PageMainAttribute()
        {
            InitializeComponent();
            DataAttribute da1 = new DataAttribute("Wind");
            DataAttribute da2 = new DataAttribute("Temperature");
            DataAttribute da3 = new DataAttribute("Rain");
            da1.AddValue("Strong");
            da1.AddValue("Storm");
            da1.AddValue("None");
            da2.AddValue("Hot");
            da2.AddValue("Cold");
            da3.AddValue("Yes");
            da3.AddValue("No");
            DataAttributeCollection dac = new DataAttributeCollection();
            dac.Add(da1);
            dac.Add(da2);
            dac.Add(da3);
            //AttributeGrid.ItemsSource = null;
            //AttributeGrid.ItemsSource = dac;
            AttributeGrid.CanUserAddRows = true;
            AttributeGrid.CanUserDeleteRows = true;
            AttributeGrid.IsReadOnly = false;
            DataGridTextColumn textColumn = new DataGridTextColumn();
            textColumn.Header = "Attribute name";
            textColumn.Binding = new Binding();
            AttributeGrid.Columns.Add(textColumn);

            for (int k=0;k<dac.MaxLength;k++)
            {
                textColumn = new DataGridTextColumn();
                textColumn.Header = "Value #"+(k+1);
                textColumn.Binding = new Binding("I dont know what to type here");
                AttributeGrid.Columns.Add(textColumn);
            }
            for(int i=0;i<dac.Size;i++)
            {
                    AttributeGrid.Items.Add(dac.ElementAt(i).AttributeName);
            }


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