c# - 将 WPF DataGrid ItemsSource 绑定(bind)到自定义 Table 对象的方法 IEnumerable<TableRow> GetRows()?

标签 c# .net wpf data-binding

我正在努力解决 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上的DataContextMyTable的一个实例。我看不到任何明确的方法来从我的 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
    }
}

我认为下一步是将 DataGridItemsSource 属性绑定(bind)到 MyTable< 上的 GetRows 方法 对象,但我不知道该怎么做。我认为也许这可以使用 ObjectDataProvider 资源来完成,但我不知道如何引用 DataContext 对象上的方法。

有人可以帮助我处理此场景的 XAML 和代码吗?

最佳答案

据我所知,您无法绑定(bind)到特定实例的方法。您可以绑定(bind)到在 XAML 中创建的实例的属性或方法,或者静态方法,但不能绑定(bind)到给定实例的方法。

参见Bind to a method in WPF .

这里有一些对我有帮助的绑定(bind)链接。

编辑:我意识到我也应该尝试解决您当前的问题。 :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/

相关文章:

c# - WPF 验证运行时生成的表单

c# - 如何使用属性的依赖注入(inject)?

c# - 文本到 Excel 中的列

.net - Dispatcher.CurrentDispatcher 与 Application.Current.Dispatcher

c# - 以编程方式导入带有私钥的证书

c# - 如何防止 ASP.NET 3.5 SP1 覆盖我的操作?

c# - 如何通过 WPF Path 对象单击保持 MVVM 模式?

c# linq GroupBy 关于列表中列表的值

c# - 电话号码标准化 : Any pre-existing libraries?

c# - 如何使用反射获取调用方法名称和类型?