Silverlight RadGrid复制操作显示类名而不是绑定值

本文关键字:绑定 RadGrid 复制 操作 显示 Silverlight | 更新日期: 2023-09-27 18:17:35

我正试图用Telerik的RadGridView (Silverlight版本)实现复制机制,但我有一个严重的问题。我的Datagrid被绑定到一个ObservableCollection。下面是MyRow类:

public class MyRow  
{ 
    public List<string> ColumnNames { get; set; } 
    public List<decimal?> Values { get; set; } 
    public String TimeStamp { get; set; } 
    public MyRow() 
    { 
        ColumnNames = new List<string>(); 
        Values = new List<decimal?>(); 
    } 
}

可以看到,列是动态创建的,因为MyRow对象可以保存任意数量的值(因此必须创建一定数量的列)。为ColumnNames中的每个String生成列,并使用参数化的ValueConverter对值进行绑定。

private void createColumns(ObservableCollection<MyRow> values) 
{ 
    while (dataGrid.Columns.Count > 1) 
        dataGrid.Columns.RemoveAt(1); 
    dataGrid.Columns[0].Header = CommonStrings.TimeStamp; 
    int columnCount = values.First().ColumnNames.Count; 
    for (int i = 0; i < columnCount; i++) 
    { 
        GridViewDataColumn col = new GridViewDataColumn(); 
        col.Header = values.First().ColumnNames[i]; 
        col.DataType = typeof(MyRow); 
        Binding bnd = new Binding(); 
        bnd.Converter = new MyRowCollectionConverter(); 
        bnd.ConverterParameter = i; 
        col.DataMemberBinding = bnd; 
        dataGrid.Columns.Add(col); 
    } 
}

然而,当我尝试复制(CTRL+C),这是我得到的:

TimeStamp               Value1 
12.12.2011. 9:51:59     MyProject.MyRow 
12.12.2011. 9:52:59     MyProject.MyRow 
12.12.2011. 9:53:59     MyProject.MyRow 
12.12.2011. 9:54:59     MyProject.MyRow

Value1为List<String> ColumnNames中包含的名称。这部分没问题。但是,我没有得到数据(是十进制值,比如0.242524312),而是得到了类名。

我能做些什么来使复制操作保留MyRow对象的绑定属性中的值,而不是它的类名(我猜它调用ToString()方法在里面)?

Silverlight RadGrid复制操作显示类名而不是绑定值

问题是绑定不是这样工作的。

正确的解决方案是绑定MyRow属性Values,然后在ValueConverter中提取相应的值(通过参数索引)。

这可以工作(与Binding相同的for循环):

for (int i = 0; i < columnCount; i++) 
{ 
    /* ... */
    Binding bnd = new Binding("Values"); 
    /* ... */
}