DataBinding DataGrid到自定义数据结构

时间:2012-10-04 20:38:38

标签: wpf data-binding datagrid

所以我刚刚参加Winforms几年后才加入WPF俱乐部。我肯定会在WPF中使用数据绑定,但是我遇到了DataGrid的问题。

我有一个高度自定义的数据结构,用于存储SQL查询的结果,我想继续在WPF中使用它。我已经看到了绑定到对象列表的示例,但没有看到像SQL查询那样动态的任何内容。

是否有一些界面可以使我的数据结构实现,因此DataGrid可以获得必要的信息,例如行和放大器。列数,标题和数据?

2 个答案:

答案 0 :(得分:0)

这些项目应该实现INotifyPropertyChanged,你应该把它们放在一个ObservableCollection<>中,这样网格就会收到有关变化的通知。

如果将AutoGenerateColumns设置为true,则Grid将自动为模型的每个属性创建一列。

如果你只有“原始”数据而没有Model-Class,那么我认为你必须手动创建列。 WPF绑定非常灵活,也可以绑定到索引属性/数组等。这可能会帮助您处理“动态”数据。

<TextBlock Text="{Binding myArray[0]}" />

答案 1 :(得分:0)

我的目标是绑定到与DataTable类似的自定义结构,允许DataGrid“发现”有关我的结构的信息。

简短的回答是实现以下接口:

IList IEnumerable ITypedList

继承自CustomTypeDescriptor(或实施ICustomTypeDescriptor

This Question在处理最具挑战性的CustomTypeDescriptor内容时提供了很多帮助。

我的枚举对象是一个简单的对象,它将引用存储回主表,以便它可以询问特定行和列的值是什么。

public AgilityTableRow(AgilityTableBase table, int rowIndex)
    {
        _table = table;
        _rowIndex = rowIndex;
    }

    public object this[int columnIndex]
    {
        get 
        {
            return _table[columnIndex, _rowIndex]; 
        }
    }

    public object this[string columnName]
    {

        get 
        {
            return _table[_table.GetFieldIndex(columnName), _rowIndex]; 
        }
    }

注意:此类需要实现ICustomTypeDescriptor,并且只需将调用转发到表即可获取属性:

public PropertyDescriptorCollection GetProperties()
    {
        return _table.GetProperties();
    }
相关问题