C# 将MVVM与(仅)从集合自动生成的某些列绑定

C# 将MVVM与(仅)从集合自动生成的某些列绑定,c#,wpf,mvvm,telerik,radgridview,C#,Wpf,Mvvm,Telerik,Radgridview,我有一个要绑定到RadGridView的对象集合(来自toolkit telerik)。对象类看起来是这样的(需要理解的代码最少),其中我有1个属性和1个值数组,其中: public class AttributeEntry : INotifyPropertyChanged { public string Code { get; set; } private string[] _values; public string[] Values

我有一个要绑定到RadGridView的对象集合(来自toolkit telerik)。对象类看起来是这样的(需要理解的代码最少),其中我有1个属性和1个值数组,其中:

public class AttributeEntry : INotifyPropertyChanged
    {
        public string Code { get; set; }
        private string[] _values;
        public string[] Values
        {
            get { return _values; }
            set { _values = value; }
        }
        public string this[int index]
        {
            get { return _values[index]; }
            set
            {
                _values[index] = value;
                if (PropertyChanged != null)
                    PropertyChanged(this, new PropertyChangedEventArgs(Binding.IndexerName));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;
    }

有人知道一种(简单的)方法吗?使用Patren MVVM,有一个RadGridView,其中定义了一些列(在我的例子中对应于“Code”属性),有一些列“自动生成”,其中每个列对应于集合的元素(在我的例子中是数组的元素值)“。如果我的集合中有7个值,我应该有7个“自动生成”列)?

不确定
RadGridView
是否正确,但对于正常的
DataGrid
而言,您可以将
AutoGenerateColumns
属性设置为
true
以基于其数据绑定自动生成列,或将
false
以基于代码创建列

在您的情况下,我认为您必须将
AutoGenerateColumns
属性设置为
false
,并自行定义列以组合这两个元素(集合的元素和code属性)

编辑:

刚刚检查了一下:

显式声明的列字段可以 与…结合使用 自动生成的列字段。 当两者都使用时,显式地 将呈现声明的列字段 首先,然后是自动 生成的列字段


我假设您正在将
RadGridView
绑定到
AttributeEntry
的集合


在这种情况下,在您的收藏上实现
ITypedList
。您可以使用
ITypedList
返回虚拟
PropertyDescriptor
,其
GetValue
SetValue
方法使用数组

为任何试图实现此功能的人,将类声明为ExpandooObject这是一个灵活的类结构,实现了INotifyPropertyChanged,您可以在代码中根据需要定义属性

在telerik raddatagrid上,将itemsource绑定到ExpandooObject集合,并将AutoGenerateColumns设置为true


如果要根据expandoobject的内容定制列,请使用AutoGeneratingColumn事件,该事件将为每个生成的列触发,如果将列控件定义为数据模板,则可以在代码隐藏中访问它们,并将它们也指定为单元格模板。

值中的元素数是否将是动态的?否。所有AttributeEntry对象在值数组中的元素数将相同。它是用一个应用程序配置参数定义的(目前是150个值,但明天可能会改变…)是的,这是我首先想到的。我尝试过这个解决方案,但是:是的,这是我首先想到的。我尝试过这个解决方案,但是:1。它不太符合MVVM:(2.我不知道为什么,但是“values”集合的第一个值没有显示……似乎绑定是在受影响的值之前完成的(对于第一个值)事实并非如此!我认为@Bolu的方向是正确的,但并非完全正确。AttributeEntry对象看起来像是其他具体数据源的奇怪转换。如果数据的底层源返回一个具有所有这些属性的对象,则RadGridView的自动生成列将按设计方式工作编辑并自动为每个属性创建列。源数据真的是非结构化的吗?