如何绑定动态数据?

时间:2014-01-30 22:07:08

标签: c# wpf gridview binding datagrid

我有一组包含超过3000个字段的数据。 我不想为每个字段手动创建类和属性。

有没有办法可以创建动态对象行并将它们绑定到列表中。

我尝试的所有内容都失败了,我不确定它是否可能使用绑定。

有人如何将问题标记下来但没有人知道解决方案。

2 个答案:

答案 0 :(得分:0)

我在动态构建的表中遇到了同样的问题。通过一些研究,我想出了一个能够处理不同数量字段的解决方案。它由两个类组成。

首先是一个属性类,将其视为表中的一列。

 public class Property
{
    public string Name { get; private set; }//field name
    public object Value { get; set; }//value
    public Type DataType { get; private set; }//datatype if needed
}

然后,你有一个记录类 - 它本质上是一个Property对象的集合。看看这是表格中的一行。

public class Record : INotifyPropertyChanged
{      
    private ObservableCollection<Property> _Properties;
    public ObservableCollection<Property> Properties
    {
        get { return _Properties; }
        set
        {
            _Properties = value;
            OnPropertyChanged("Properties");
        }
    }

    public Record(List<Property> properties)
    {
        _Properties = new ObservableCollection<Property>();

        foreach (var property in properties)
            _Properties.Add(property);
    }

    public Record(List<Property> properties)
    {
        _Properties = new ObservableCollection<Property>();            

        foreach (var property in properties)
            _Properties.Add(property);
    }

    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    //protected virtual void OnPropertyChanged(PropertyChangedEventArgs args)
    //{
    //    PropertyChangedEventHandler handler = this.PropertyChanged;
    //    if (handler != null)
    //    {
    //        handler(this, args);
    //    }
    //}

}    

然后,您可以将基本上是记录集合的内容绑定到您需要的任何控件或项目。

答案 1 :(得分:0)

你说你用过我的评论并发帖。

我现在无法访问代码但是对于GridView,我使用List然后在ctor中为每列创建GridViewColumn并将其绑定到string [i]。或者您可以使用DataTable和DataGrid。