Мне нужно создать DataGrid
, где ItemsSourc
e - это коллекция типа списка (DataAttributeCollection), каждый объект (DataAttribute) внутри имеет attributename
в виде строки и список значений в виде строки. На данный момент сетка показывает 2 заголовка, attributenam
e и values
, ячейки ниже attributename
правильно с attributename
, но значения пусты http://prntscr.com/n81tg7. У меня 2 проблемы:
- есть только 1 столбец значений, их должно быть столько, сколько значений
внутри
dataattribute
объект.
- Как мне попасть во внутренний список и вставить значения в ячейки?
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);
}
}
}
}