C# 将MVVM与(仅)从集合自动生成的某些列绑定
我有一个要绑定到RadGridView的对象集合(来自toolkit telerik)。对象类看起来是这样的(需要理解的代码最少),其中我有1个属性和1个值数组,其中: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
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的自动生成列将按设计方式工作编辑并自动为每个属性创建列。源数据真的是非结构化的吗?