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

时间:2011-04-20 15:01:40

标签: c# wpf mvvm telerik radgridview

我有一组对象,我想绑定到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个“自动生成”列?)

3 个答案:

答案 0 :(得分:1)

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

在这种情况下,请在您的收藏中实施ITypedList。您可以使用ITypedList返回其PropertyDescriptorGetValue方法使用数组的虚拟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

  

明确声明的列字段可以   与...结合使用   自动生成的列字段。   两者都明确使用时   声明的列字段将被渲染   首先,然后自动   生成列字段。