我有一组对象,我想绑定到RadGridView(来自工具包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;
}
有人知道(简单)方式,使用patern MVVM,使RadGridView定义了一些列(在我的情况下对应于'Code'属性)和一些列“自动生成”,每列对应于元素一个集合(在我的例子中是数组'Values'的元素。如果我的集合中有7个值,我应该有7个“自动生成”列?)
答案 0 :(得分:1)
我假设您将RadGridView
绑定到AttributeEntry
的集合。
在这种情况下,请在您的收藏中实施ITypedList
。您可以使用ITypedList
返回其PropertyDescriptor
和GetValue
方法使用数组的虚拟SetValue
答案 1 :(得分:1)
对于任何试图实现它的人,将您的类声明为expandoobject,这是一个灵活的类结构,带有实现INotifyPropertyChanged,您可以根据代码的需要定义属性。
在telerik上,raddatagrid将itemsource绑定到expandoobjects的集合,并将AutoGenerateColumns设置为true。
如果你想根据expandoobject的内容定制列,那么使用AutoGeneratingColumn事件,这会为每个列生成触发,如果你将列控件定义为datatemplates,你可以在后面的代码中访问它们并分配它们细胞模板也是如此。
答案 2 :(得分:0)
不确定RadGridView
但是对于正常DataGrid
,您可以将AutoGenerateColumns
属性设置为true
,以根据数据绑定或{{1}自动生成列根据您的代码创建列。
在您的情况下,我认为您必须将false
属性设置为AutoGenerateColumns
并自行定义列以合并两者(集合的元素和Code属性)。罢工>
修改强>
刚刚查看了MSDN:
明确声明的列字段可以 与...结合使用 自动生成的列字段。 两者都明确使用时 声明的列字段将被渲染 首先,然后自动 生成列字段。