我正在努力解决 WPF 数据绑定(bind)的学习曲线,可以使用一个示例。对于那些回答问题并链接到帮助他们“获取”WPF 数据绑定(bind)的文章的人,可以获得奖励积分。
我正在尝试将自定义 Table 对象与 WPF DataGrid 绑定(bind)。
这是我的对象(我无法更改它们,签名被截断了一点):
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; }
}
因此当前Window
上的DataContext
是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
}
}
我认为下一步是将 DataGrid
的 ItemsSource
属性绑定(bind)到 MyTable< 上的
对象,但我不知道该怎么做。我认为也许这可以使用 GetRows
方法ObjectDataProvider
资源来完成,但我不知道如何引用 DataContext 对象上的方法。
有人可以帮助我处理此场景的 XAML 和代码吗?
最佳答案
据我所知,您无法绑定(bind)到特定实例的方法。您可以绑定(bind)到在 XAML 中创建的实例的属性或方法,或者静态方法,但不能绑定(bind)到给定实例的方法。
这里有一些对我有帮助的绑定(bind)链接。
- MSDN: Data Binding How-to Topics
- WPF Basic Data Binding FAQ
- WPF XAML Data Binding Cheat Sheet
- Bea Stollnitz: How can I debug WPF bindings?
编辑:我意识到我也应该尝试解决您当前的问题。 :P
首先,我对 WPF 中的 DataGrid 控件没有太多经验。话虽如此,绑定(bind) ItemsSource 时不是会自动生成列吗?
我处理您的问题的方法是围绕 MyTable 对象创建一个包装器,并在包装器中实现一个调用 GetRows 方法的属性。将 DataContext 设置为包装器并将 ItemsSource 绑定(bind)到该属性。
关于c# - 将 WPF DataGrid ItemsSource 绑定(bind)到自定义 Table 对象的方法 IEnumerable<TableRow> GetRows()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1739568/