Я борюсь с кривой обучения привязке данных WPF и могу использовать пример. Бонусные баллы для тех, кто отвечает на вопрос и ссылается на статью, которая помогла им «получить» привязку данных WPF.
Я пытаюсь связать пользовательский объект Table с WPF DataGrid.
Вот мои объекты (у меня нет возможности их менять, подписи немного усекаются):
public class MyTable
{
public int ColumnCount { get; }
public string GetColumnName(int columnIndex);
public IEnumerable<MyTableRow> GetRows();
}
public class MyTableRow
{
public MyTableCell [] Cells { get; }
}
public class MyTableCell
{
public string Value { get; }
}
Таким образом, DataContext
на текущем Window
является экземпляром MyTable
. Я не мог найти какой-либо четкий способ автоматического создания столбцов из моего MyTable
объекта, поэтому я сгенерировал их в коде:
private void dg_Table_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
{
MyTable tbl = e.NewValue as MyTable;
if (tbl != null)
{
//setup data grid columns
dg_Table.Columns.Clear();
for (int i = 0; i < tbl.ColumnCount; i++)
{
var column = new DataGridTextColumn()
{
Header = tbl.GetColumnName(i),
Binding = new Binding(string.Format("Cells[{0}]", i))
};
dg_Table.Columns.Add(column);
}
//end setup data grid columns
}
}
Я думаю, что следующим шагом будет привязка свойства ItemsSource
DataGrid
к методу GetRows
объекта MyTable
, но я не уверен, как это сделать. Я подумал, что это может быть сделано с использованием ресурса ObjectDataProvider
, но я не могу понять, как ссылаться на метод в объекте DataContext.
Может ли кто-нибудь помочь мне с XAML и кодом для этого сценария?