Несмотря на то, что я смог построить вашу демонстрацию аналогичным образом (с использованием VS2017), я не вижу в ней такой практичности, поскольку она не показывает ничего, поскольку нет источника привязки определенного типа c, который вы пытаетесь установить в контексте привязки to.
Вместо этого вы можете найти что-то полезное. Если у вас есть коллекция (List, ObservableCollection и т. Д. c.), Которую вы запрашиваете или иным образом заполняете, и вы хотите, чтобы она автоматически создавалась, вы можете сделать это с помощью отражения. Например, у меня есть собственный класс
public class MySamplePerson
{
public string FirstName {get; set;}
public string LastName {get; set;}
public int Age {get; set;}
}
Затем в вашем методе вы готовите список этих вещей
private void PrepareYourGrid()
{
// build a sample list of the data and I'm populating with 3 entries
var SampleData = new List<MySamplePerson>();
SampleData.Add(new MySamplePerson{ FirstName = "Bill", LastName = "Board", Age = 62});
SampleData.Add(new MySamplePerson{ FirstName = "Eileen", LastName = "Dover", Age = 32 });
SampleData.Add(new MySamplePerson{ FirstName = "Ben", LastName = "Dover", Age = 33});
// using reflection, I am taking the first instance within the list,
// getting the type, and then getting a list of all the properties on that class.
var pi = SampleData[0].GetType().GetProperties();
// Now, for each property, go through and create a column
foreach( var onePI in pi)
{
var col = new DataGridTextColumn();
// header based on the property name and binding to that same column name,
// not just some fixed "text" value you prove
col.Header = onePI.Name;
col.Binding = new Binding(onePI.Name);
// now add the column to the grid
MyDataGrid1.Columns.Add(col);
}
// Now I can set the ItemsSource for the grid to the list of records I created
MyDataGrid1.ItemsSource = SampleData;
}
В моем примере моя сетка данных формы была названа "MyDataGrid1 ». Теперь, если вы запустите, сетка покажет столько строк, сколько у вас есть, и каждое из опубликованных свойств c также будет открыто ..